2014-02-22 142 views
0

我有一个人实体,并在其中的人的两个列表,我以这种方式实现(感谢这个帖子:Hibernate many-to-many association with the same entity):映射列表

@ManyToMany 
@JoinTable(name="tbl_friends", 
[email protected](name="personId"), 
[email protected](name="friendId") 
) 
private List<User> friends; 

@ManyToMany 
@JoinTable(name="tbl_friends", 
[email protected](name="friendId"), 
[email protected](name="personId") 
) 
private List<User> friendOf; 

但是,随着@ManyToMany注释级联(MERGE,DELETE等)不起作用。 有没有办法实现相同的映射,但启用级联?

回答

0

级联可以使用多对多关联。但大多数情况下,不应该在多对多关联中设置级联:因为朋友是许多人的朋友,所以不能删除所有约翰的朋友(保罗和马特)当你删除约翰。事实上,许多其他人(杰克,萨拉)也把保罗和马特当朋友,这会导致违反约束条件。

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

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

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