2013-01-02 4 views
1

J'ai une classe parente:héritage JPA ne fonctionne pas

@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 
} 

Et l'une des sous-catégories:

@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. 
} 

Quand je suis en train de persister un objet que je reçois l'erreur suivante:

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. 

Quelle est la cause de cette problème et comment le résoudre? J'utilise la base de données Derby intégrée dans JUnit et l'implémentation JPA est OpenJPA.

+0

est-ce que LocalizedText implémente Serializable? – invariant

+0

Oui, toutes les entités implémente Serializable. –

+1

Publier LocalText? – JustDanyul

Répondre

0

Je ne suis pas sûr que c'est la solution, mais je manque une annotation @Inheritance de AssessmentText:

@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 { 
0

J'ai eu le même problème, et a résolu le problème en ajoutant le MappedSuperClass au persistence.xml.

Je sais que c'est aussi dans les commentaires quelque part, mais l'utile était caché et je pense que cela devrait être une réponse, pas un commentaire à la question.