2012-01-28 13 views
1

につながる:
Referential integrity constraint violation: "FKCE6C075833B16F41: PUBLIC.TEACHER_COURSE FOREIGN KEY(COURSES_ID) REFERENCES PUBLIC.COURSE(ID)" SQL statement: delete from Course where id=?子オブジェクトを削除すると、私は「コース」オブジェクトを削除しようとすると、私はこの例外を取得するJDBCバッチ更新例外

「コース」クラスは、次のようになります。

@Entity 
public class Course extends Model { 
    @ManyToOne 
    public Teacher teacher; 
    ... 
} 

「先生」クラスは次のようになります。私は(delete()メソッドを使用して)私のコントローラから「コース」を削除しようとするたびに私は、

@Entity 
public class Teacher extends Model { 
    @OneToMany(mappedBy="teacher", cascade=CascadeType.ALL) 
    public List<Course> courses; 
    ... 
} 

上記の例外を取得します。どうすれば修正できますか?私は様々なマッピング方法を試みました。データベースのスキーマをどこかで修正する必要はありますか?

ありがとうございました!これは私が最初に投稿したものです。何か明確にする必要がある場合は、教えてください!あなたがCourseレコードを削除しようとしているよう

答えて

1

は、私には見えるが、あなたは(テーブルに参加TEACHER_COURSEに保存されている)を削除しようとしているコースへの参照を持っているTeacherレコードがまだあります。これは、CourseTeacherであり、TeacherCourseのオブジェクトを所有していることを認識しているため、双方向関係を定義しているため、は通常です。

1つのオプションは、(例えば。coursesリストを削除することにより、CourseTeacherから関係を削除する)可能な場合は、単純に双方向の関係を取り除くことであろう。もう1つは、削除するCourseインスタンスを最初にcoursesリストから削除してから削除することです(注::コースを削除する前にcoursesのリストを最初に維持/マージしなければならない場合があります)。

This question on the matterは、いくつかの追加の洞察を提供するかもしれません。

+0

私は、リストからコースのインスタンスを削除しようとしたが、それは複雑さを証明し、私はそれを必要としないことに気付きましたので、私は関係を削除。しかし、私はこれらのJPAドキュメントを読む必要があります。再度、感謝します! – Budgetperson

1

逆方向の関係をマッピングしていると思います。あなたは教師の代わりに、関係の親側であるコースのようなマッピングです。 Hibernate docsから:

が所有側として1対多の側で、多くの双方向の1をマッピングするには、挿入可能とする更新可能なように、1つ@JoinColumnに多くをmappedBy要素を削除し、設定する必要があります偽です。このソリューションは最適化されておらず、いくつかの追加のUPDATEステートメントが生成されます。

@Entity 
public class Course extends Model { 
    @ManyToOne 
    @JoinColumn(name="teacher_id") 
    public Teacher teacher; 
    ... 
} 

と教師:

@Entity 
public class Teacher extends Model { 
    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumn(name="teacher_id") 
    public List<Course> courses; 
    ... 
} 
関連する問題