如何在 JPA 中混合继承类型
How to mix inheritance type in JPA
如何在同一继承树中混合使用单一 table 类型继承和连接 table 类型?
我不使用休眠只是 JPA。
通过阅读 JPA 规范,我知道没有对混合继承的官方支持。
我无法更改架构。它确实适用于休眠,但现在我需要使用 openjpa 来实现它。
我正在寻找一些解决方法。
这对我有用:
超级class:
@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" 不是一个实体。
子class - "JOIN"继承:
@Entity
@SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID") )
@DiscriminatorValue("BD")
public class B extends A implements SomeIntefaceB {
…
创建一个新的 table "A_SECOND_TABLE" 并加入超级 class 主键 "ID"。
每个不在连接列中但出现在我们的 table 中的字段都标记如下:
@Basic
@Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0)
注意 table 值。
Subclass – 单table继承:
@Entity
public class C extends A implements SomeIntefaceC {...
简单的单一table继承。
如何在同一继承树中混合使用单一 table 类型继承和连接 table 类型? 我不使用休眠只是 JPA。 通过阅读 JPA 规范,我知道没有对混合继承的官方支持。 我无法更改架构。它确实适用于休眠,但现在我需要使用 openjpa 来实现它。 我正在寻找一些解决方法。
这对我有用:
超级class:
@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" 不是一个实体。
子class - "JOIN"继承:
@Entity
@SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID") )
@DiscriminatorValue("BD")
public class B extends A implements SomeIntefaceB {
…
创建一个新的 table "A_SECOND_TABLE" 并加入超级 class 主键 "ID"。 每个不在连接列中但出现在我们的 table 中的字段都标记如下:
@Basic
@Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0)
注意 table 值。
Subclass – 单table继承:
@Entity
public class C extends A implements SomeIntefaceC {...
简单的单一table继承。