在 JPA/Hibernate 中,像 BetterBaseEntity
这样的映射父类(super class)可以是另一个映射父类(super class) BaseEntity
的子类吗?
我想保留 BaseEntity
因为几乎每个人都在使用它,但我想添加一些新的父级功能。
最佳答案
关系数据库没有将类层次结构映射到数据库表的直接方法。
为了解决这个问题,JPA 规范提供了几种策略:
MappedSuperclass——父类,不能是实体
单表——来自不同类的具有共同祖先的实体放在一个表中
Joined Table——每个类都有自己的表,查询子类实体需要join表
Table-Per-Class – 一个类的所有属性都在它的表中,因此不需要连接
每种策略都会产生不同的数据库结构。
实体继承意味着我们可以在查询父类(super class)时使用多态查询来检索所有子类实体。
由于 Hibernate 是一个 JPA 实现,它包含上述所有内容以及一些与继承相关的特定于 Hibernate 的功能。
映射父类(super class):-
使用 MappedSuperclass 策略,继承仅在类中是明显的,而不是实体模型。
让我们从创建一个代表父类的 Person 类开始:
@MappedSuperclass
public class Person {
@Id
private long personId;
private String name;
// constructor, getters, setters
} 请注意,此类不再具有 @Entity 注释,因为它不会自行保存在数据库中。
接下来,让我们添加一个 Employee 子类:
@Entity
public class MyEmployee extends Person {
private String company;
// constructor, getters, setters
}
在数据库中,这将对应一个“MyEmployee”表,其中三列用于子类的声明和继承字段。
如果我们使用此策略,则祖先不能包含与其他实体的关联。
更多详情引用-
https://ritesh-shukla.blogspot.com/2018/10/hibernate-inheritance-mapping.html?m=1
关于java - MappedSuperclass 扩展另一个 MappedSuperclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732327/