【问题标题】:Avoid JPA abstract class extra tables避免 JPA 抽象类额外表
【发布时间】:2019-03-30 13:22:27
【问题描述】:

我正在使用具有 3 个抽象类和 2 个具体类的 JPA JOINED 继承策略。 像这样(代码减少例如目的):

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class Employee {
    @Id
    private Long id;

    private String firstName;
    private String secondName;
}

@Entity
abstract class ProjectManager extends Employee {
    @OneToMany(mappedBy="manager")
    private List<Developer> developers;
}


@Entity
abstract class Developer extends Employee {
    @ManyToOne
    @JoinColumn(name="project_manager_id")
    private ProjectManager manager;
}

@Entity
class JavaProjectManager extends ProjectManager {
    private String someCustomProperty;
}

@Entity
class JavaDeveloper extends Developer {
    private String skill;
}

这样,JPA 创建了 5 个表。但是其中一张表,抽象 ProjectManager 它是空的。我的意思是,由于继承策略,ProjectManager 表只有 ID 列。

我的问题是:如何避免 ProjectManager 抽象类的额外表,但保持相同的类层次结构?

我无法删除 ProjectManager 类上的 @Entity,因为我仍然需要与 Developer 类的双向关系。

编辑:

另外,我不希望将开发人员 OneToMany 从 ProjectManager 转移到 JavaProjectManager,因为我有更多从 ProjectManager 扩展的类并且需要开发人员。

【问题讨论】:

标签: java database hibernate jpa orm


【解决方案1】:

InheritanceType.TABLE_PER_CLASS 完全符合您的要求。

这种类型只为非抽象表创建/使用表。

在此处阅读有关各种类型的更多信息:

https://www.thoughts-on-java.org/complete-guide-inheritance-strategies-jpa-hibernate/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2017-10-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多