我有一个人实体和两个人名单,我这样实现(感谢这篇文章:Hibernate many-to-many association with the same entity):
@ManyToMany
@JoinTable(name="tbl_friends",
joinColumns=@JoinColumn(name="personId"),
inverseJoinColumns=@JoinColumn(name="friendId")
)
private List<User> friends;
@ManyToMany
@JoinTable(name="tbl_friends",
joinColumns=@JoinColumn(name="friendId"),
inverseJoinColumns=@JoinColumn(name="personId")
)
private List<User> friendOf;
但是,使用@ManyToMany注释时,Cascadings(MERGE,DELETE等)不起作用。 有没有办法实现相同的映射,但启用Cascadings?
答案 0 :(得分:0)
Cascadings与多对多协会合作。但大多数时候,不应该在多对多关联中设置任何级联:因为朋友是很多人的朋友,所以你不能删除所有John的朋友(Paul和Matt)当你删除约翰时。事实上,许多其他人(杰克,莎拉)也有保罗和马特作为朋友,因此会导致违反约束。
代码的问题在于映射是错误的。您在此处具有单个双向多对多关联,但您使用相同的连接表将其映射为两个单向多对多关联。
在双向关联中,一方必须是反方。如果选择friendOf
作为反面,则应将其映射为
@ManyToMany(mappedBy = "friends")
private List<User> friendOf;