Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JPA中映射具有额外列的多个自反关系_Jpa_Many To Many_Extra - Fatal编程技术网

如何在JPA中映射具有额外列的多个自反关系

如何在JPA中映射具有额外列的多个自反关系,jpa,many-to-many,extra,Jpa,Many To Many,Extra,我试图通过Hibernate使用JPA映射用户/朋友关系。关系中有一个额外的列friendship Status,用于描述被请求的朋友是否接受了友谊请求。 这是我想通过映射得到的数据库模型 User ===== Id Name etc... UserFriend =========== UserId ( foreign key --> user_id) FriendId ( foreign key --> user_id) userFriendStatus FriendShipRe

我试图通过Hibernate使用JPA映射用户/朋友关系。关系中有一个额外的列friendship Status,用于描述被请求的朋友是否接受了友谊请求。 这是我想通过映射得到的数据库模型

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

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

我还需要一个使用这种关系的代码示例。

因为联接表中有其他列,所以不能使用多个来映射它。它必须映射为两个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;
}
@实体
公共类用户{
// ...
/**
*此用户请求的友谊列表
*/
@OneToMany(mappedBy=“sourceUser”)
private List frienships=new ArrayList();
}
@实体
公众阶级友谊{
// ...
/**
*询问友谊的用户
*/
@ManyToOne()
@JoinColumn(name=“user\u id”)
私有用户sourceUser;
/**
*向其请求友谊的用户
*/
@ManyToOne()
@JoinColumn(name=“friend\u id”)
私人用户targetUser;
}
如果需要,您还可以在用户中添加反向关系:

/**
 * the list of friendships asked to this user
 */
@OneToMany(mappedBy = "targetUser")
private List<Friendship> requestedFriendships = new ArrayList<Friendship>();
/**
*向该用户请求的友谊列表
*/
@OneToMany(mappedBy=“targetUser”)
private List requestedFriendships=new ArrayList();