如何在JPA中混合inheritance类型

如何在同一inheritance树中混合单表类型inheritance和连接表类型? 我没有使用hibernate只是JPA。 我知道通过阅读JPA规范,没有官方支持混合inheritance。 我无法改变架构。 它确实与hibernate一起工作但现在我需要使用openjpa来实现它。 我正在寻找一些解决方法。

这对我有用:

超类:

@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "TYPE_DISCRIMINATOR") public class A extends SomeClass implements SomeInteface { … @Id @Column(name = "ID", nullable = false, precision = 0) public Integer getPk() { return super.getPk(); } … 

请注意,“SomeClass”不是实体。

子类 – “JOIN”inheritance:

 @Entity @SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID") ) @DiscriminatorValue("BD") public class B extends A implements SomeIntefaceB { … 

创建一个新表“A_SECOND_TABLE”,并加入超类主键“ID”。 不在连接列中并显示在我们的表中的每个字段都标记为:

 @Basic @Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0) 

注意表值。

子类 – 单表inheritance:

 @Entity public class C extends A implements SomeIntefaceC {... 

简单的单表inheritance。