2016-09-21 3 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

Смежные вопросы