我用的是:
冬眠
MySQL数据库
jBoss软件
我必须创建一个允许用户建立友谊的应用程序。
我还在设计阶段,我想要这些桌子:
- User {_id, name, address}
- Friendship {idUserA, idUserB, date}
出于我的目的,我应该和用户建立一种相互关系。例如1是2的朋友,间接地2是1的朋友。
所以在我的桌子上我想有:
友谊={1,2,…}
我在问我怎样才能模仿这种行为。我已经读过他的主题:Many-to-many on the same table with additional columns并且我遵循了这条指令从实体(hibernate的属性)生成数据库表。但在这个例子中,当我加载我的朋友A时,我有一个带有朋友B的列表,当我加载B时,我没有将用户A添加到列表中。
我怎么能实现这种该死的相互关系?
最佳答案
就我所知,这个样本的相互性并不是隐含的。要从A->B和B->A建立友谊关系,必须在表中添加两个条目,或者必须实现两个集合并返回两个列表的交集:
@OneToMany(mappedBy="myFriends")
private List<MyFriends> myFriends;
@OneToMany(mappedBy="me")
private List<MyFriends> iAmFriendOf;
...
Set<MyFriends> getFriends() {
Set<MyFriends> friends = new HashSet<MyFriends>();
friends.addAll(myFriends);
friends.addAll(iAmFriendOf);
return friends;
}