例如,一个用户实体有一个朋友的财产,我该怎么设计这个朋友财产,在我的思想有2种方式:如何设计一个与自身有多对多关系的表格?
- 朋友财产是由分裂的所有用户名的字符串“”在这这种方式很难阅读和修改。
- 朋友的财产是一个像
Set<Users>
设置,但在这种方式,我不知道如何写在实体?
任何人都知道最佳实践?
例如,一个用户实体有一个朋友的财产,我该怎么设计这个朋友财产,在我的思想有2种方式:如何设计一个与自身有多对多关系的表格?
Set<Users>
设置,但在这种方式,我不知道如何写在实体?任何人都知道最佳实践?
如果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
表的外键。
这是由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);
Aww,他们的友谊永远不会结束! – Noah 2015-02-02 21:47:11
我试过并使用与您的相同的JPA注释,它的工作原理。谢谢。这种自我关系的任何其他问题你认为会导致以后? – JerryCai 2012-07-16 03:04:19
我认为友谊必须对两个用户都是可见的,所以你必须设置友谊的另一端。除了循环依赖,我没有看到任何未来的问题。 ;-) – siebz0r 2012-07-16 12:24:12