Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

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
Java JPA中的继承不起作用_Java_Jpa - Fatal编程技术网

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,现在它可以工作了。