如何不以递归关系级联删除?

时间:2011-11-25 13:13:56

标签: java hibernate jpa

我有一个与自身有ManyToMany关系的实体:

@Entity
public class User {

    @Id
    private Long id;

    @ManyToMany
    private List<User> friends;
}

如何在不删除所有朋友的情况下删除用户?我显然不能使用级联删除。如果我尝试删除没有级联的用户,我会收到此错误:“无法删除或更新父行:外键约束失败”

3 个答案:

答案 0 :(得分:1)

实际上我不认为在使用级联hibernate尝试删除朋友时,通常应该只删除存储在另一个表中的2个用户之间的链接。

这就是为什么你没有级联的原因,因为当你试图删除2个用户中的一个时,因为在两个用户上都有外键约束的链接(U1,U2)仍然存在。

答案 1 :(得分:1)

通常使用ManyToMany,我们会在不同的表格中映射数据,删除不会造成太多问题。我觉得你的情况不同,你有自我关系。我认为您需要使用其他一些方法来执行此操作。

How can I delete a user without deleting all of his friends?以下选项就是其中之一。

考虑到List<User>中的User特殊映射,您应仅更新映射表引用,而不是从User表中删除任何内容。因为他们可能有其他User朋友,这可能会产生问题。

答案 2 :(得分:0)

为了删除用户,您必须从所有其他用户的friends列表中删除此用户,因为在数据库中这些引用是外键。此删除不能自动完成,即使用注释。