避免使用JPA抽象类多余的表

时间:2018-10-25 20:26:56

标签: java database hibernate jpa orm

我正在将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扩展而来,并且需要开发人员。

1 个答案:

答案 0 :(得分:1)

InheritanceType.TABLE_PER_CLASS完全可以满足您的要求。

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

在此处详细了解各种类型:

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