【发布时间】:2012-07-12 21:41:28
【问题描述】:
例如,一个Users实体有一个friends属性,我该如何设计这个friends属性,在我看来有2种方式:
- friends 属性是一个字符串,所有用户名都用“,”分隔,这样很难阅读和修改。
- friends属性是一个像
Set<Users>这样的Set,但是这样我不知道实体怎么写?
谁知道最好的做法?
【问题讨论】:
标签: database hibernate jpa orm
例如,一个Users实体有一个friends属性,我该如何设计这个friends属性,在我看来有2种方式:
Set<Users>这样的Set,但是这样我不知道实体怎么写?谁知道最好的做法?
【问题讨论】:
标签: database hibernate jpa orm
如果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 创建一个表,并为Users 之间的关系创建一个连接表。 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);
【讨论】: