映射另一个人的人员名单

时间:2014-02-22 12:23:22

标签: jpa mapping

我有一个人实体和两个人名单,我这样实现(感谢这篇文章: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?

1 个答案:

答案 0 :(得分:0)

Cascadings与多对多协会合作。但大多数时候,不应该在多对多关联中设置任何级联:因为朋友是很多人的朋友,所以你不能删除所有John的朋友(Paul和Matt)当你删除约翰时。事实上,许多其他人(杰克,莎拉)也有保罗和马特作为朋友,因此会导致违反约束。

代码的问题在于映射是错误的。您在此处具有单个双向多对多关联,但您使用相同的连接表将其映射为两个单向多对多关联。

在双向关联中,一方必须是反方。如果选择friendOf作为反面,则应将其映射为

@ManyToMany(mappedBy = "friends")
private List<User> friendOf;