Java JPA中的继承不起作用
我有一个父类:Java JPA中的继承不起作用,java,jpa,Java,Jpa,我有一个父类: @MappedSuperclass public class BaseText implements Serializable { @Column(name = "LOCALE_CODE", nullable = false) private String localeCode; @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @Index @Column(n
@MappedSuperclass
public class BaseText implements Serializable {
@Column(name = "LOCALE_CODE", nullable = false)
private String localeCode;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@Index
@Column(name = "LOCALIZED_TEXT_ID", nullable = false)
@ForeignKey
private LocalizedText localizedText;
//getters and setters
}
以及其中一个子类:
@Entity
@Table(name = "ASSESSMENT_TEXT")
@AttributeOverride(name = "localeCode", column = @Column(name = "LOCALE_CODE"))
@AssociationOverride(name = "localizedText", joinColumns = @JoinColumn(name = "LOCALIZED_TEXT_ID"))
public class AssessmentText extends BaseText {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@Index
@Column(name = "ASSESSMENT_ID", nullable = false)
@ForeignKey
private Assessment assessment;
//Getters and setters.
}
当我试图持久化对象时,会出现以下错误:
org.apache.openjpa.persistence.ArgumentException: Superclass field "java.lang.Object.localizedText" is mapped in the metadata for subclass "com.my.com.AssessmentText", but is not a persistent field.
这是什么原因造成的?如何解决
我在JUnit中使用嵌入式derby数据库,JPA实现是OpenJPA。我不确定它是否是解决方案,但我错过了AssessmentText中的@Inheritation注释:
@Entity
@Table(name = "ASSESSMENT_TEXT")
@Inheritance(strategy=InheritanceType.JOINED)
@AttributeOverride(name = "localeCode", column = @Column(name = "LOCALE_CODE"))
@AssociationOverride(name = "localizedText",
joinColumns = @JoinColumn(name = "LOCALIZED_TEXT_ID"))
public class AssessmentText extends BaseText {
我也遇到了同样的问题,通过向persistence.xml添加MappedSuperClass解决了这个问题
我知道这也在某个地方的注释中,但有用的注释被隐藏了,我认为这应该是一个答案,而不是对问题的注释。LocalizedText是否实现了可序列化?是的,所有实体都实现了可序列化。只需注意,重写有点毫无意义,没有任何更改,。您正在将它们重写为相同的值:为什么在localizedText映射上有该列?如果需要的话,它应该只有可能带有joinColumn注释的manyTone来定义列。我不确定OpenJPA会如何处理它,但是一个列注释应该是一个基本映射,并且可能与您的manytone冲突。这是我愚蠢的错误。我忘了将BaseText类添加到OpenJPA的persistence.xml文件中。此外,我还删除了*.Override注释并添加了@InheritanceSenategy=InheritanceType.JOINED,现在它可以工作了。