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