2012-07-13 47 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

相关问题