首页 > Java > java教程 > 正文

理解 JPA 中的 @MappedSuperclass

PHPz
发布: 2024-08-25 18:00:36
原创
967 人浏览过

Entendendo @MappedSuperclass em JPA

JPA(Java Persistence API)提供了各种注释来将Java类映射到数据库表。一个这样有用的注释是@MappedSuperclass,它用于指定一个类,其属性必须由其他实体类继承,但它本身不是实体。让我们通过涉及 Vehicle、Car 和 Motorcycle 等类的实际示例来探索此注释的有用性。

@MappedSuperclass 是什么?

@MappedSuperclass 注解用于指示一个类不应该是一个独立的实体,但它的属性应该被其他作为实体的类继承。当您想要在多个实体之间共享公共属性而不为基类创建单独的表时,这非常有用。

主要特点:

  1. - 用 @MappedSuperclass 注解的类不是一个实体。
  2. - 无法直接在 @MappedSuperclass 类上执行查询。
  3. - 扩展 @MappedSuperclass 类的子类被映射到数据库中的各个表,但继承基类的字段。

实际例子

让我们创建一个包含 Vehicle、Car 和 Motorcycle 类层次结构的示例,其中 Vehicle 是超类。

1.基类:车辆

雷雷
  • Vehicle 类用 @MappedSuperclass 注解。
  • Vehicle 类有一个 id 字段,用 @id 和 @GenerateValue 注释。这个唯一标识符将被所有子类继承,确保从Vehicle派生的每个实体都有一个id字段。
  • 它定义了三个共同属性:品牌、型号和年份。

2.子类:汽车

雷雷
  • Car 类继承了 Vehicle 类的属性。
  • 它用@Entity注解并映射到一个名为car的表。

3.子类:摩托车

雷雷
  • Motorcycle 类也继承了 Vehicle 类的属性。
  • 它用@Entity注释并映射到一个名为motorcycle的表。

表格映射

通过上述类,JPA 将在数据库中创建以下表:

  1. 汽车表:包含车门的品牌、型号、年份和数量栏。
  2. Table 摩托车:包含品牌、型号、年份和 temSidecar 列。

Vehicle 表在数据库中不存在,因为 Vehicle 类只是一个超类,而不是实体。

使用的好处@MappedSuperclass

  • 标识符集中化:id字段在超类中管理。所有源自Vehicle的实体都共享相同的标识方案。
  • 代码重用:公共属性可以集中在超类中,避免子类中的重复。
  • 易于维护:可以在一处对公共属性进行更改。
  • 内聚数据模型:子类共享相同的结构,这使得模型更易于操作和理解。

注意事项

如果你希望超类也是一个实体(例如直接查询),请使用@Inheritance继承策略而不是@MappedSuperclass。
@MappedSuperclass 非常适合基类不需要作为单个实体持久化,但其属性与多个实体相关的情况。

结论

@MappedSuperclass 注释是在 JPA 中创建可重用类层次结构的强大工具。在上面的示例中,我们设法集中了车辆中的公共属性,同时保持了汽车和摩托车实体的灵活性和独立性。这种方法促进了更清洁、更模块化的设计,特别是在具有共享相似特征的多个实体的系统中。

以上是理解 JPA 中的 @MappedSuperclass的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!