Hibernate 单向 ManyToMany 仅从关联中删除 table

Hibernate unidirectional ManyToMany delete only from association table

我对 java 和休眠(带注释)还很陌生,不确定以下内容是否正确。我有两个 table 之间的单向多对多关系,如下例所示:

class Group { 
@ManyToMany(cascade = {CascadeType.ALL})
            @JoinTable(
                    name = "Group_Students",
                    joinColumns = @JoinColumn(name = "group_id", referencedColumnName="group_id),
                    inverseJoinColumns = @JoinColumn(name = "student_id", referencedColumnName="student_id)
            )
         private Set<Student> students;
}

以下工作正常: - 如果我保存 Group 的实例,则插入 table Student -> 这工作正常 - 如果组的学生实例被修改,则在 table Student 中更新 -> 这工作正常 我想从组和关联 table 中删除记录,但保留学生 table 中的记录。目前在删除组记录之前,我将实例的学生集设置为空 (students = null)。这似乎工作得很好,但我不确定这是否是正确的做法,或者这是一种不好的做法——似乎这个解决方案只是一种解决方法,将来可能会导致问题。您对如何执行此操作还有其他建议吗?

这是一种不好的做法。您几乎不应该在多对多关联中级联 ALLREMOVE,因为删除 Group 后,您可能不希望删除级联到所有学生属于那个组。

正确的做法是只指定需要的级联类型(没有上面提到的两种)。然后,由于关联是单向的,您可以简单地删除 Group(无需对 students 集合进行任何更改)。