我正在尝试使用JPA over Hibernate来映射USER / FRIEND关系。通风船有一个额外的coloumn friendShipStatus,描述请求的朋友是否已接受友谊请求。 这是我想通过映射得到的数据库模型。
User
=====
Id
Name
etc...
UserFriend
===========
UserId ( foreign key --> user_id)
FriendId ( foreign key --> user_id)
userFriendStatus
FriendShipRequestDate
我还需要使用这个relationShips的代码示例。
答案 0 :(得分:1)
由于连接表中有其他列,因此无法使用ManyToMany进行映射。它必须映射为两个OneToMany关系:
一个用户(来源)有很多友谊
一个友谊是针对一个来源用户(要求友谊的用户)
一个友谊是针对一个目标用户(必须接受友谊的用户)
因此,您应该拥有以下实体:
@Entity
public class User {
// ...
/**
* the list of friendships asked by this user
*/
@OneToMany(mappedBy = "sourceUser")
private List<Friensdship> frienships = new ArrayList<Friendship>();
}
@Entity
public class Friendship {
// ...
/**
* the user who asked the friendship
*/
@ManyToOne()
@JoinColumn(name = "user_id")
private User sourceUser;
/**
* the user to whom the friendship was asked
*/
@ManyToOne()
@JoinColumn(name = "friend_id")
private User targetUser;
}
如果需要,您还可以在用户中添加反向关系:
/**
* the list of friendships asked to this user
*/
@OneToMany(mappedBy = "targetUser")
private List<Friendship> requestedFriendships = new ArrayList<Friendship>();