Hibernate单向ManyToMany仅从关联表

时间:2016-02-18 16:56:36

标签: hibernate many-to-many

我对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)。这似乎工作得很好,但我不确定这是否是正确的方法,或者这是一个不好的做法 - 似乎这个解决方案只是一种解决方法,并可能在将来引起问题。关于如何做这个有什么其他的建议吗?

1 个答案:

答案 0 :(得分:0)

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

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