我有一个父类:
@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 的 @Inheritance 注释:
@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 {
关于java - JPA 中的继承不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125362/