Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate单向多个仅从关联表中删除_Hibernate_Many To Many - Fatal编程技术网

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

我对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;
}
类组{
@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语句,当前删除未级联到学生。我将尝试此操作。非常感谢。