【问题标题】:How to mix inheritance type in JPA如何在 JPA 中混合继承类型
【发布时间】:2016-11-18 14:28:52
【问题描述】:

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

【问题讨论】:

  • 您需要添加一些上下文。您可以发布您正在尝试的代码吗?
  • JPA 清楚地告诉您在树的根部指定继承策略,仅此而已。您如何将它与该约束“混合”?

标签: java jpa jakarta-ee openjpa jpa-2.1


【解决方案1】:

这对我有用:

超类:

@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”继承:

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

在超类主键“ID”上创建一个新表“A_SECOND_TABLE”。 不在连接列中但出现在我们表中的每个字段都标记如下:

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

注意表格值。

子类——单表继承:

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

简单的单表继承。

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2015-05-13
    • 2013-12-04
    • 2023-03-13
    • 2015-08-31
    相关资源
    最近更新 更多