如何建立朋友关系?为什么hibernate会为多对多关系创建一个新的table
how to make a friend relationship?Why does hibernate create a new table for ManyToMany relationship
我需要有好友关系,每个用户可以有零到多个好友。
我不确定这样做是否正确以及为什么休眠要创建第三个 table,我想外键足以建立关系。
如何去掉第三个 table?在数据库中为用户生成一个table,另一个是朋友table,最后一个称为User_Friend,其中有User_id、friends_requester_id、friends_receiver_id 字段。
这里的主要问题是每个用户都可以在 user_friend 关系中而不是友谊的一部分。例如
User_id friends_requester_id friends_receiver_id
1 1 2
2 1 2
3 1 2 <<<this one is incorrect,
user id 3 is not part of this friendship record
我的类如下,我需要知道是谁提出的请求以及关系开始的日期。
@Entity
public class User{
@Id
@GeneratedValue
long id;
@ManyToMany(cascade = CascadeType.ALL)
List<Friend> friends;
..
}
@Entity
public class Friend implements Serializable {
@Id
@ManyToOne
User friendRequester;
@Id
@ManyToOne
User friendReceiver;
@Temporal(javax.persistence.TemporalType.DATE)
Date date;
..
}
你告诉 Hibernate 这是一个多对多关联。
所以一个用户必须能够有几个朋友(这排除了用户中的外键table),而一个朋友必须能够有很多用户(这排除了一个外键键入好友 table)。因此,唯一的方法是为协会加入 table。
如果你真正想要的是让用户能够成为多个朋友的请求者,同时也是多个朋友的接收者,那么你不需要多对多的关联。您想要的是 2 个一对多关联,它们是您在 Friend 中已有的多对一关联的反面:
public class User {
// ...
@OneToMany(mappedBy = "friendRequester")
private Set<Friend> requestedFriends;
@OneToMany(mappedBy = "friendReceiver")
private Set<Friend> receivedFriends;
}
顺便说一下,我会把 Friend 重命名为 Friendship,因为 Friend 的实例不是朋友,而是两个朋友用户之间的关联。
我需要有好友关系,每个用户可以有零到多个好友。
我不确定这样做是否正确以及为什么休眠要创建第三个 table,我想外键足以建立关系。
如何去掉第三个 table?在数据库中为用户生成一个table,另一个是朋友table,最后一个称为User_Friend,其中有User_id、friends_requester_id、friends_receiver_id 字段。
这里的主要问题是每个用户都可以在 user_friend 关系中而不是友谊的一部分。例如
User_id friends_requester_id friends_receiver_id
1 1 2
2 1 2
3 1 2 <<<this one is incorrect,
user id 3 is not part of this friendship record
我的类如下,我需要知道是谁提出的请求以及关系开始的日期。
@Entity
public class User{
@Id
@GeneratedValue
long id;
@ManyToMany(cascade = CascadeType.ALL)
List<Friend> friends;
..
}
@Entity
public class Friend implements Serializable {
@Id
@ManyToOne
User friendRequester;
@Id
@ManyToOne
User friendReceiver;
@Temporal(javax.persistence.TemporalType.DATE)
Date date;
..
}
你告诉 Hibernate 这是一个多对多关联。
所以一个用户必须能够有几个朋友(这排除了用户中的外键table),而一个朋友必须能够有很多用户(这排除了一个外键键入好友 table)。因此,唯一的方法是为协会加入 table。
如果你真正想要的是让用户能够成为多个朋友的请求者,同时也是多个朋友的接收者,那么你不需要多对多的关联。您想要的是 2 个一对多关联,它们是您在 Friend 中已有的多对一关联的反面:
public class User {
// ...
@OneToMany(mappedBy = "friendRequester")
private Set<Friend> requestedFriends;
@OneToMany(mappedBy = "friendReceiver")
private Set<Friend> receivedFriends;
}
顺便说一下,我会把 Friend 重命名为 Friendship,因为 Friend 的实例不是朋友,而是两个朋友用户之间的关联。