gpt4 book ai didi

java - 避免 JPA 抽象类额外的表

转载 作者:行者123 更新时间:2023-12-02 10:39:51 28 4
gpt4 key购买 nike

我正在使用 JPA JOINED 继承策略,其中包含 3 个抽象类和 2 个具体类。像这样(为了示例目的减少了代码):

@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 扩展的类并且需要开发人员。

最佳答案

InheritanceType.TABLE_PER_CLASS 正是您想要的。

此类型仅为非抽象表创建/使用表。

在此处了解有关各种类型的更多信息:

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

关于java - 避免 JPA 抽象类额外的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52997596/

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