从具有休眠ManyToMany关系的集合中删除对象
问题描述:
任何人都可以帮忙吗?从具有休眠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);
}
答
你得到的问题是你对教师级联的变化,但不是级联的课程变化。如果你从另一个角度来解决这个问题,它应该如何工作。
而不是从课程中删除老师,你需要从老师删除课程,让Hibernate级联这种变化。
@Override
public void removeTeacherFromCourse(Course course, Teacher teacher) {
teacher.getCourses().remove(course);
updateTeacher(teacher);
}
这是因为您已经放置了注释。因为你已经对教师设置了JoinTable
声明,这就是“拥有”关系的对象的一面。你需要在这一边进行所有的操作,以便改变级联到其他对象。
关系所有者的课程课程,因为那是我拥有联合表格注解的地方。 – makassi