Database 如何设计一个与自身有多对多关系的表?
例如,一个用户实体有一个friends属性,我如何设计这个friends属性,我认为有两种方法:Database 如何设计一个与自身有多对多关系的表?,database,hibernate,jpa,orm,Database,Hibernate,Jpa,Orm,例如,一个用户实体有一个friends属性,我如何设计这个friends属性,我认为有两种方法: friends属性是一个字符串,所有用户名都用“,”分隔,这样很难读取和修改 friends属性是一个类似于Set的集合,但这样我就不知道如何在实体中编写 有人知道最佳实践吗?这是Hay介绍的企业模型模式 一方代表一个人(或一个组织): 一方可以在一段时间内与另一方建立关系: PartyRelationship fromPartyId toPartyId fromDate toDate nullab
Set
的集合,但这样我就不知道如何在实体中编写有人知道最佳实践吗?这是Hay介绍的企业模型模式 一方代表一个人(或一个组织): 一方可以在一段时间内与另一方建立关系:
PartyRelationship
fromPartyId
toPartyId
fromDate
toDate nullable
基本图表:
Party -< PartyRelationship >- Party
如果一个
用户
可以有多个朋友,您可以这样注释您的用户
实体:
@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;
}
@实体
公共类用户
{
@身份证
私人长id;
私有字符串名称;
@许多
@可接合(
name=“user\u friends”,
连接柱=
{@JoinColumn(
name=“user\u id”)},
反向连接柱=
{@JoinColumn(
name=“friend\u id”)})
私交朋友;
}
这样,将为
用户
创建一个表,并为用户
之间的关系创建一个联接表。User
表将有两列,“id”和“name”。user\u friend
表将有两列,“user\u id”和“friend\u id”。user\u friend
中的列都是user
表的外键。我尝试并使用了与您相同的JPA注释,它可以工作。非常感谢。你认为这种自我关系以后还会出现其他问题吗?我假设友谊必须对两个用户都可见,所以你必须设置友谊的另一端。除了循环依赖之外,我看不到任何未来的问题。;-)啊,他们的友谊永远不会结束!
insert into party values (1, 'Jerry');
insert into party values (2, 'Neil');
insert into partyRelationship values (1, 2, getDate(), null);
@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;
}