2012-07-13 26 views
1

例如,一個用戶實體有一個朋友的財產,我該怎麼設計這個朋友財產,在我的思想有2種方式:如何設計一個與自身有多對多關係的表格?

  1. 朋友財產是由分裂的所有用戶名的字符串「」在這這種方式很難閱讀和修改。
  2. 朋友的財產是一個像Set<Users>設置,但在這種方式,我不知道如何寫在實體?

任何人都知道最佳實踐?

回答

1

如果User可以有多個朋友,你可以註解你User實體是這樣的:

@Entity 
public class User 
{ 
    @Id 
    private Long id; 
    private String name; 
    @ManyToMany 
    @JoinTable(
      name = "user_friends", 
      joinColumns = 
      { @JoinColumn(
        name = "user_id") }, 
      inverseJoinColumns = 
      { @JoinColumn(
        name = "friend_id") }) 
    private Set<User> friends; 
} 

這樣一個表格會得到User創建一個連接表User S之間的關係。 User表將有2列,'id'和'name'。 user_friend表將包含2列'user_id'和'friend_id'。 user_friend中的列都是User表的外鍵。

+0

我試過並使用與您的相同的JPA註釋,它的工作原理。謝謝。這種自我關係的任何其他問題你認爲會導致以後? – JerryCai 2012-07-16 03:04:19

+0

我認爲友誼必須對兩個用戶都是可見的,所以你必須設置友誼的另一端。除了循環依賴,我沒有看到任何未來的問題。 ;-) – siebz0r 2012-07-16 12:24:12

2

這是由Hay涵蓋的企業模型模式。

的一方代表一個人(或組織):

Party 
id 
name 

一方可以具有到另一方的關係,在一個時間段:

PartyRelationship 
fromPartyId 
toPartyId 
fromDate 
toDate nullable 

的基本框圖:

Party -<PartyRelationship>- Party 

樣本SQL:

insert into party values (1, 'Jerry'); 
insert into party values (2, 'Neil'); 

insert into partyRelationship values (1, 2, getDate(), null); 
+2

Aww,他們的友誼永遠不會結束! – Noah 2015-02-02 21:47:11

相關問題