在JPA/Hibernate中,像BetterBaseEntity这样的映射超类是否是另一个映射超类BaseEntity的子类?
我想保留BaseEntity,因为几乎每个人都使用它,但是想添加一些新的父功能。
发布于 2018-10-10 04:15:25
关系数据库没有将类层次结构映射到数据库表的简单方法。
为了解决这个问题,JPA规范提供了几种策略:
MappedSuperclass -父类,不能是实体
单表-来自具有共同祖先的不同类的实体放置在单个表中。
联接表-每个类都有自己的表,查询子类实体需要加入表。
表-每个类-类的所有属性都在其表中,因此不需要联接。
每种策略都会产生不同的数据库结构。
实体继承意味着我们可以在查询超类时使用多态查询来检索所有子类实体。
由于Hibernate是一个JPA实现,它包含上述所有内容以及一些与继承相关的Hibernate特定特性。
超级阶级:-
使用MappedSuperclass策略,继承只在类中明显,而不是在实体模型中。
让我们从创建代表父类的Person类开始:
@MappedSuperclass
public class Person {
@Id
private long personId;
private String name;
// constructor, getters, setters}请注意,这个类不再有@Entity注释,因为它本身不会被保存在数据库中。
接下来,让我们添加一个雇员子类:
@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
https://stackoverflow.com/questions/52732327
复制相似问题