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
)。这似乎工作得很好,但我不确定这是否是正确的做法,或者这是一种不好的做法——似乎这个解决方案只是一种解决方法,将来可能会导致问题。您对如何执行此操作还有其他建议吗?
这是一种不好的做法。您几乎不应该在多对多关联中级联 ALL
或 REMOVE
,因为删除 Group
后,您可能不希望删除级联到所有学生属于那个组。
正确的做法是只指定需要的级联类型(没有上面提到的两种)。然后,由于关联是单向的,您可以简单地删除 Group
(无需对 students
集合进行任何更改)。
我对 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
)。这似乎工作得很好,但我不确定这是否是正确的做法,或者这是一种不好的做法——似乎这个解决方案只是一种解决方法,将来可能会导致问题。您对如何执行此操作还有其他建议吗?
这是一种不好的做法。您几乎不应该在多对多关联中级联 ALL
或 REMOVE
,因为删除 Group
后,您可能不希望删除级联到所有学生属于那个组。
正确的做法是只指定需要的级联类型(没有上面提到的两种)。然后,由于关联是单向的,您可以简单地删除 Group
(无需对 students
集合进行任何更改)。