2011-10-24 5 views
1

J'ai un problème avec le mappage un-à-plusieurs.
Deux tables de questions (PK (id), texte) et réponses (PK (id, questionId), texte)
Dans mon application, j'utilise ces tables en mode lecture seule.
Je veux définir les relations entre cette tablesOneToMany et PK complexe

@Entity 
@Table(name = "QUESTIONS") 
public class Question { 
    @Id 
    @Column(name = "QUESTIONID") 
    private long questionId; 
    @Column(name = "QUESTIONTEXT") 
    private String questionText; 
    @OneToMany(mappedBy = "question", fetch = FetchType.EAGER) 
    private List<Answer> answers;   
} 

@Entity 
@Table(name = "ANSWERS") 
public class Answer implements Serializable { 

    @EmbeddedId 
    private AnswerPK AnswerPK; 
    @Column(name = "ANSWERTEXT") 
    private String answerText; 
    @ManyToOne 
    @JoinColumn(name = "QUESTIONID", insertable = false, updatable = false) 
    private Question question; 
} 

@Embeddable 
public class AnswerPK implements Serializable { 
    @Column(name = "QUESTIONID") 
    private long questionId; 
    @Column(name = "ANSWERID") 
    private int answerId; 
} 

Mais quand je l'utilise @JoinColumn sera créé clé étrangère.
Et quand je tente de remplir les tables, je suis exception

java.sql.SQLIntegrityConstraintViolationException: ORA-02292: integrity constraint (ZODI.FK_ANSWERS_QUESTIONID) violated - child record found 

Répondre

1

Essayez de mettre insérables/actualisable = false dans le EmbeddedId, pas le JoinColumn.

Considérez également de ne pas utiliser un EmbeddedId, utilisez plutôt une IdClass, puis vous avez juste besoin d'annoter le answerId et la question avec @Id. Ou mieux encore, supprimez le questionId de la clé primaire et assurez-vous que answerId est unique (comme en faire un identifiant généré).

Voir, http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_and_ManyToOne_Relationships

+0

Merci pour la réponse. Mais j'utilise maintenant bidouille laide pour ces relations (sous-requête) – Sarge

Questions connexes