Hibernate 在OpenJPA中对超类和子类使用相同的类型鉴别器
我正在尝试使用OpenJPA复制hibernate的行为,我尝试了以下方法: 超类:Hibernate 在OpenJPA中对超类和子类使用相同的类型鉴别器,hibernate,jpa,openjpa,Hibernate,Jpa,Openjpa,我正在尝试使用OpenJPA复制hibernate的行为,我尝试了以下方法: 超类: @Entity @Table(name = "A") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "TYPE") @DiscriminatorValue("A") public class A{... 子类: @Entity @DiscriminatorValue("A") public c
@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{..
这导致异常指示两个类不能具有相同的鉴别器
是否有只使用注释的解决方案 那么您要说的是,您想要持久化类型为
A
的对象和类型为B
的对象,当检索到它们时,它们都被实例化为类型为A
的实例?因此B
将不再是B
我找不到任何情况下这会被认为是一个好主意。任何强制所有具体类型具有不同鉴别器值的JPA实现都是正确的。因此,我们可以得出这样的结论:
OpenJPA
的行为是它应该的,而“围绕它工作”是一个坏主意。抽象类不应该需要“值”,它现在还不是抽象的。我理解这是一个糟糕的设计,尽管它与hibernate一起工作。我只是想把它迁移到openjpa,但是如果我改变设计,会有很多业务逻辑依赖关系被破坏,这太昂贵了。我需要两个与同一个表关联的实体,一个子类和一个超类,具有相同的类型鉴别器。