2011-10-24 7 views
1

1対多のマッピングに問題があります。
2つのテーブルの質問(PK(id)、text)と回答(PK(id、questionId)、text)
私のアプリではこのテーブルを読み取り専用モードで使用します。
私はこのテーブル間のリレーションOneToManyと複合体PK

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

を定義したいしかし、私は@JoinColumn外部キーを作成されます使用する場合。
そして、私はテーブルを埋めるためにしようとすると、私は例外

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

答えて

1

EmbeddedId、ないJoinColumnに偽=更新可能に挿入/を入れてみてくださいを得ました。

また、EmbeddedIdを使用しないで、代わりにIdClassを使用すると、answerIdと質問に@Idという注釈を付ける必要があります。あるいは、より良いことに、プライマリキーからquestionIdを削除し、answerIdが一意であることを確認します(例えば、生成されたIDにするなど)。

を参照してください、答えを http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_and_ManyToOne_Relationships

+0

感謝。しかし、私は今この関係(サブクエリ)のために醜いハックを使用します。 – Sarge