首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MappedSuperclass扩展另一个MappedSuperclass

MappedSuperclass扩展另一个MappedSuperclass
EN

Stack Overflow用户
提问于 2018-10-10 03:47:17
回答 1查看 2.2K关注 0票数 3

在JPA/Hibernate中,像BetterBaseEntity这样的映射超类是否是另一个映射超类BaseEntity的子类?

我想保留BaseEntity,因为几乎每个人都使用它,但是想添加一些新的父功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 04:15:25

关系数据库没有将类层次结构映射到数据库表的简单方法。

为了解决这个问题,JPA规范提供了几种策略:

MappedSuperclass -父类,不能是实体

单表-来自具有共同祖先的不同类的实体放置在单个表中。

联接表-每个类都有自己的表,查询子类实体需要加入表。

表-每个类-类的所有属性都在其表中,因此不需要联接。

每种策略都会产生不同的数据库结构。

实体继承意味着我们可以在查询超类时使用多态查询来检索所有子类实体。

由于Hibernate是一个JPA实现,它包含上述所有内容以及一些与继承相关的Hibernate特定特性。

超级阶级:-

使用MappedSuperclass策略,继承只在类中明显,而不是在实体模型中。

让我们从创建代表父类的Person类开始:

代码语言:javascript
复制
@MappedSuperclass
public class Person {

    @Id
    private long personId;
    private String name;

    // constructor, getters, setters

}请注意,这个类不再有@Entity注释,因为它本身不会被保存在数据库中。

接下来,让我们添加一个雇员子类:

代码语言:javascript
复制
@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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52732327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档