其實我我不是OneToMany的忠實粉絲,尤其是ManyToMany關係。我更喜歡像你一樣有另一張像友誼一樣的桌子。所以據我所知,你正在混合的方法。對我來說,最簡單的方法是有一個朋友表和所有在該表中所需要的是比賽的兩個朋友這樣設計可能是:
@Entity
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column
private String name;
@Column
private String address;
}
@Entity
public class Friendship {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name="friend_requester_id")
private User friendRequester;
@ManyToOne
@JoinColumn(name="friend_accepter_id")
private User friendAccepter;
private Date date;
}
在列出的朋友或者你可以列出的友誼 - 否則它們都使用另一個表 - 或朋友這張桌子。然而,這有點棘手如果你想列出只有朋友,但不那麼難。你可以有一個getFriends(List<Friendship> friendships, int userId)
方法和列表這樣的朋友:
List<User> friends ...
Iterator iterator = friendships.iterator();
while (iterator.hasNext()) {
Friendship friendship = (Friendship) iterator.next();
if (friendship.getFriendRequester().getId != userId) {
friends.add(friendship.getFriendRequester);
} else {
friends.add(friendship.getFriendAccepter);
}
}
return friends;
這個實現,你可以區分誰要求成爲後來朋友(如果需要的話)的另一個優點。
在我看來,是的,它似乎是複雜和過度勞累,但它是相當可維護和較少痛苦。
你可以給一些示例代碼如何設計你的實體類嗎? – magomi 2012-03-29 13:14:20
我直接複製:http://stackoverflow.com/questions/1831186/many-to-many-on-the-same-table-with-additional-columns from Arthur Ronald FD Garcia – CeccoCQ 2012-03-29 13:16:08