2016-09-21 10 views
1

誰にも助けてくれますか?休止状態のManyToMany関係を持つコレクションからオブジェクトを削除する

私は現在、休止状態のManyToMany関連のコースから教師を削除する際に問題に直面しています。コースに教師を追加することはできますが、削除することはできません。コースとその関連する教師のモデルを表示するビューがあります。私が新しい教師を永続させてコースに加えると、すべてうまくいく。しかし、私が教師を取り除くと、教師はまだその講義を表示しています。

// inside the teacher class 
@ManyToMany(mappedBy = "teachers") 
private Set<Course> courses = new HashSet<>(); 

// inside the course class 
@ManyToMany(cascade = {CascadeType.ALL}) 
@JoinTable(name="COURSE_TEACHERS", 
    joinColumns={@JoinColumn(name="COURSE_ID")}, 
    inverseJoinColumns={@JoinColumn(name="ID")}) 
private Set<Teacher> teachers = new HashSet<>(); 

//here is how I am trying to remove the teacher from the course 
@Override 
public void removeTeacherFromCourse(Course course, Teacher teacher) { 
    course.getTeachers().remove(teacher); 
    updateCourse(course); 
} 

答えて

0

教師の変更はカスケードしていますが、カスケードの変更はありません。あなたが他の角度からこの問題に来るなら、あなたはそれもあなたがそれを期待する方法を働かせるべきです。

コースから教師を削除する代わりに、教師からコースを削除して、Hibernateがそのように変更をカスケードする必要があります。

@Override 
public void removeTeacherFromCourse(Course course, Teacher teacher) { 
    teacher.getCourses().remove(course); 
    updateTeacher(teacher); 
} 

これは、アノテーションを配置した場所が原因です。教師にあなたのJoinTable宣言を設定したので、それは関係を「所有している」オブジェクトの側です。変更が他のオブジェクトにカスケードするように、その側ですべての操作を行う必要があります。

+0

私はジョイントテーブルアピールを持っているので、関係の所有者のコースクラス。 – makassi

関連する問題