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(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/

相关文章:

java - Hibernate - 如何持久化 Map<UUID,POJO>

java - java中字符串数组的重复元素

java - HQL检查对象是否包含请求集合的所有元素

java - 如何使用 Javassist 在 ChMethod 中使用 insertBefore () 加载修改?

java - 编译失败-静态变量示例

mysql - Eclipselink 随机抛出 MySQL 的误导性重复条目错误?

java - 什么时候不使用 EntityManager.flush()?

java - 没有 Spring Boot 泛型会失败?

java - intellij 在我的 Windows 笔记本电脑和 Macbook 之间共享工作区

java - j2me中如何将12小时时间转换为24小时时间?