gpt4 book ai didi

java - MappedSuperclass 扩展另一个 MappedSuperclass

转载 作者:行者123 更新时间:2023-12-05 06:30:14 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com