2014-02-22 59 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;