Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 在OpenJPA中对超类和子类使用相同的类型鉴别器_Hibernate_Jpa_Openjpa - Fatal编程技术网

Hibernate 在OpenJPA中对超类和子类使用相同的类型鉴别器

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

我正在尝试使用OpenJPA复制hibernate的行为,我尝试了以下方法:

超类:

@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,但是如果我改变设计,会有很多业务逻辑依赖关系被破坏,这太昂贵了。我需要两个与同一个表关联的实体,一个子类和一个超类,具有相同的类型鉴别器。