我对java和hibernate(带注释)相当新,并且不确定下面是否正确。我在两个表之间有多对多的单向关系,如下例所示:
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;
}
以下工作正常:
- 如果我保存组的实例,则在表格中插入 - &gt;这工作正常
- 更新表格学生如果修改了本集团的学生实例 - &gt;这工作正常
我想从组和关联表中删除记录,但保留在Student表中的记录。目前,在删除组记录之前,我将实例的学生集设置为null(students = null
)。这似乎工作得很好,但我不确定这是否是正确的方法,或者这是一个不好的做法 - 似乎这个解决方案只是一种解决方法,并可能在将来引起问题。关于如何做这个有什么其他的建议吗?
答案 0 :(得分:0)
这是一种不好的做法。您应该几乎不会在多对多关联中级联ALL
或REMOVE
,因为删除Group
后,您可能不希望将删除级联到所有关联属于该组的学生。
正确的方法是仅指定所需的级联类型(没有上面提到的两种)。然后,由于关联是单向的,您只需删除Group
(不对students
集合进行任何更改)。