我正在将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扩展而来,并且需要开发人员。
答案 0 :(得分:1)
InheritanceType.TABLE_PER_CLASS完全可以满足您的要求。
此类型仅为非抽象表创建/使用表。
在此处详细了解各种类型:
https://www.thoughts-on-java.org/complete-guide-inheritance-strategies-jpa-hibernate/