【问题标题】:Using the same type discriminator for superclass and subclass in OpenJPA在 OpenJPA 中对超类和子类使用相同的类型鉴别器
【发布时间】:2017-03-22 10:31:27
【问题描述】:

我正在尝试使用 OpenJPA 复制休眠的行为,我尝试了类似的方法:

超类:

@Entity
@Table(name = "A")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE")
@DiscriminatorValue("A")
public class A{...

子类:

@Entity
@DiscriminatorValue("A")
public class B extends A{..

导致异常指示两个类不能具有相同的鉴别器。

仅使用注释是否有解决方案?

【问题讨论】:

  • 抽象类不需要“值”
  • 现在不抽象了。

标签: hibernate jpa openjpa


【解决方案1】:

那么你的意思是你想要持久化一个A 类型的对象和一个B 类型的对象,当它们被检索时,它们都被实例化为A 类型的实例?所以B 将不再是B!!

我找不到任何可以将其视为好主意的情况。任何强制所有具体类型具有不同鉴别器值的 JPA 实现都在做正确的事情。因此,我们可以得出结论,OpenJPA 的行为是应有的,“解决它”是个坏主意。

【讨论】:

  • 我知道这是一个糟糕的设计,尽管它适用于休眠。我只是试图将它迁移到openjpa,而如果我更改该设计,那么有很多业务逻辑依赖项可能会中断,这太昂贵了。我需要两个与同一个表关联的实体,一个子类和超类,具有相同的类型鉴别器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2016-06-19
相关资源
最近更新 更多