0

我正在尝试使用 JPA over Hibernate 映射 USER/FRIEND 关系。关系船有一个额外的列friendShipStatus,用于描述所请求的朋友是否已接受而不是友谊请求。这是我想通过映射获得的数据库模型。

User
=====
Id
Name
etc...

UserFriend
===========
UserId ( foreign key --> user_id)
FriendId ( foreign key --> user_id)
userFriendStatus
FriendShipRequestDate

我还需要一个使用这个relationships 的代码示例。

4

1 回答 1

1

由于连接表中有其他列,因此无法使用多对多进行映射。它必须映射为两个 OneToMany 关系:

一位用户(来源)有许多友谊

One Friendship is for one source User(请求友谊的用户)

一个好友是一个目标用户(必须接受好友的用户)

因此,您应该拥有以下实体:

@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;
}

如果需要,您还可以在 user 中添加反向关系:

/**
 * the list of friendships asked to this user
 */
@OneToMany(mappedBy = "targetUser")
private List<Friendship> requestedFriendships = new ArrayList<Friendship>();
于 2011-03-25T15:39:10.250 回答