Hibernate单向多个仅从关联表中删除
我对java和hibernate(带注释)相当陌生,不确定下面的说法是否正确。我在两个表之间有一个单向多对多关系,如下例所示:Hibernate单向多个仅从关联表中删除,hibernate,many-to-many,Hibernate,Many To Many,我对java和hibernate(带注释)相当陌生,不确定下面的说法是否正确。我在两个表之间有一个单向多对多关系,如下例所示: class Group { @ManyToMany(cascade = {CascadeType.ALL}) @JoinTable( name = "Group_Students", joinColumns = @JoinColumn(name = "group_i
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;
}
类组{
@ManyToMany(cascade={CascadeType.ALL})
@可接合(
name=“小组学生”,
joinColumns=@JoinColumn(name=“group\u id”,referencedColumnName=“group\u id),
inverseJoinColumns=@JoinColumn(name=“student\u id”,referencedColumnName=“student\u id)
)
私立学校学生;
}
以下工作正常:
-如果我保存了组的实例,则在表中插入学生->此操作正常
-如果修改了组的学生实例,则在表中更新学生->此操作正常
我想删除组和关联表中的记录,但保留学生表中的记录。当前,在删除组记录之前,我将实例的学生集设置为null(
students=null
)。这似乎工作得很好,但我不确定这是正确的方法还是一种不好的做法——似乎这一解决方案只是一种变通方法,可能会在将来引发问题。你还有其他建议吗?这是一种不好的做法。您几乎不应该在多对多关联中级联ALL
或REMOVE
,因为删除组后,您可能不希望将删除级联到属于该组的所有学生
正确的方法是只指定所需的级联类型(不包括上述两种类型)。然后,由于关联是单向的,您只需删除组
(不更改学生
集合)。因此,通过更改级联类型,添加新学员时,可能会在表中插入/更新该学员,删除该学员时,只会删除关联表中的链接,而不会删除学员表中的链接由于students=null语句,当前删除未级联到学生。我将尝试此操作。非常感谢。