我有一个与自身有ManyToMany关系的实体:
@Entity
public class User {
@Id
private Long id;
@ManyToMany
private List<User> friends;
}
如何在不删除所有朋友的情况下删除用户?我显然不能使用级联删除。如果我尝试删除没有级联的用户,我会收到此错误:“无法删除或更新父行:外键约束失败”
答案 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
列表中删除此用户,因为在数据库中这些引用是外键。此删除不能自动完成,即使用注释。