java - MappedSuperclass 扩展另一个 MappedSuperclass

标签 java hibernate jpa

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

相关文章:

hibernate - Grails刷新:在Domain.withTransaction {}闭包内部为true

java - 在 spring 应用程序中注入(inject) 2(不久的将来 3)个不同的 entityManagerFactory(或 entityManager)

Java API修改

java - Eclipse 使用带有 line 的资源直接转到行号

java - 不同模型(包括rf、glm)在h2o(R)中的堆叠

java - 如何在 Swing 中逐渐旋转图像?

hibernate - 使用 Hibernate 将子类持久化为父类(super class)

java - 如何为同一个@Constraint 实现多个JSR-303 验证消息?

java - JSF、JPA 应用程序中的 SQL 查询错误

java - JPA @Id and insertable = false, updatable = false 抛出异常