Inheritance 为什么我的@MappedSuperClass没有';不行?

Inheritance 为什么我的@MappedSuperClass没有';不行?,inheritance,ejb,entity,openjpa,mappedsuperclass,Inheritance,Ejb,Entity,Openjpa,Mappedsuperclass,我有以下@MappedSuperClass和@Entity: @MappedSuperclass public class SuperClass implements Serializable {....} @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @Table(name = "TABLE1") public class Table1 extends SuperClass implements Seriali

我有以下@MappedSuperClass和@Entity:

@MappedSuperclass 
public class SuperClass implements Serializable {....}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Table(name = "TABLE1")
public class Table1 extends SuperClass implements Serializable {...}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Table(name = "TABLE2")
public class Table2 extends SuperClass implements Serializable {...}
在数据库中,两个表都有相同的列,因此所有my属性都在超类中:

@Id
private String attr1;

@Id
private String attr2;

@Column(name="DATA")
private String data;

// getters and setters
但是当我尝试使用@entity(表1或表2)之一执行查询时,我得到一个OpenJPA错误:

Error pre-processing class table1 with weblogic.deployment.PersistenceUnitInfoImpl$ClassPreProcessorImpl@205c54b'
<openjpa-1.1.0-r422266:657916 fatal user error> 
org.apache.openjpa.util.MetaDataException: Type "class SuperClass" with application identity and no superclass does not declare an id class.  
This type is not eligible for builtin identity, so it must declare an id class.
使用weblogic.deployment.PersistenceUnitInfoImpl预处理类表1时出错$ClassPreProcessorImpl@205c54b'
org.apache.openjpa.util.MetaDataException:键入具有应用程序标识的“类超类”,并且没有超类不声明id类。
此类型不符合内置标识的条件,因此它必须声明一个id类。
我不明白为什么在@Entity类中找不到属性@Id

如果有人有任何想法,请随时帮助我:)

问候,


Cytemax

感谢您在评论中回答此Cytemax。我在这里找到了有关clarafication的更多信息:


给出的示例没有使用注释,但您在注释中提到了注释。对于openJPA来说,这是一件很奇怪的事情,但当我在脑海中查看表和java对象层次结构时,这有点道理。

感谢您在评论中回答Cytemax。我在这里找到了有关clarafication的更多信息:


给出的示例没有使用注释,但您在注释中提到了注释。openJPA需要一件奇怪的事情,但当我在脑海中查看表和java对象层次结构时,这有点道理。

我的@Entity类必须有一个@IdClass(SuperClassPK.class),因为我的主键包含两个属性(attr1和attr2)

此@IdClass声明这两个属性,并且必须重写“equals”和“hashcode”方法


也许这会帮助其他人;)

My@Entity类必须有一个@IdClass(SuperClassPK.class),因为我的主键包含两个属性(attr1和attr2)

此@IdClass声明这两个属性,并且必须重写“equals”和“hashcode”方法

也许这会帮助其他人;)