Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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
Java持久性与自我的多对多关系_Java_Database_Annotations_Many To Many_Persistence - Fatal编程技术网

Java持久性与自我的多对多关系

Java持久性与自我的多对多关系,java,database,annotations,many-to-many,persistence,Java,Database,Annotations,Many To Many,Persistence,我有一个用户类,用户应该有一个朋友列表。朋友也是用户,所以每个用户都应该有很多朋友,显然每个朋友(用户)也有很多朋友(用户) 到目前为止,我一直假设用户之间存在多对多的关系。这是我目前正在使用的代码(带有hibernation JPA注释) 以下是我的MyUser代码: @Entity public class MyUser { @Id private String username; private String userPassword; @ManyToMany @JoinTable

我有一个用户类,用户应该有一个朋友列表。朋友也是用户,所以每个用户都应该有很多朋友,显然每个朋友(用户)也有很多朋友(用户)

到目前为止,我一直假设用户之间存在多对多的关系。这是我目前正在使用的代码(带有hibernation JPA注释)

以下是我的MyUser代码:

@Entity
public class MyUser {

@Id
private String username;
private String userPassword;

@ManyToMany
  @JoinTable(
  name="USR_USR",
  joinColumns={@JoinColumn(name="USR1_ID", referencedColumnName="USERNAME")},
  inverseJoinColumns={@JoinColumn(name="USR2_ID", referencedColumnName="USERNAME")})
private List<MyUser> friends = new ArrayList<MyUser>();

public void setUsername(String username) {
    this.username = username;

public void setUserPassword(String userPassword) {
    this.userPassword = userPassword;
}

public String getUsername() {
    return username;

public String getUserPassword() {
    return userPassword;
}

public void setFriends(List<MyUser> friends) {
    this.friends = friends;
}

public List<MyUser> getFriends() {
    return friends;
}
@实体
公共类MyUser{
@身份证
私有字符串用户名;
私有字符串用户密码;
@许多
@可接合(
name=“USR\u USR”,
joinColumns={@JoinColumn(name=“USR1\u ID”,referencedColumnName=“USERNAME”)},
inverseJoinColumns={@JoinColumn(name=“USR2\u ID”,referencedColumnName=“USERNAME”)}
private List friends=new ArrayList();
public void setUsername(字符串用户名){
this.username=用户名;
public void setUserPassword(字符串userPassword){
this.userPassword=userPassword;
}
公共字符串getUsername(){
返回用户名;
公共字符串getUserPassword(){
返回用户密码;
}
公众朋友(列出朋友){
这个。朋友=朋友;
}
公共列表getFriends(){
回报朋友;
}
我正试图通过将USERNAME列与其自身连接起来来创建第二个表(老实说,这听起来不太合适)

因此,我试图在我的数据库中创建一个关系,其中每个MyUser都可以有许多MyUser

我被这件事缠住了,希望能得到一些帮助。
非常感谢!

我建议将您的数据库架构更改为以下内容:

MyUser(id, ....);
Friends(id1, id2);
其中MyUser.id是MyUser的主键,朋友id1和id2是MyUser.id的外键

这是一种非常常见的模式,将来会给您带来更少的问题,并且更易于维护。如果friends数据库(1,2)中有一个元组,那么用户a(w/ID 1)与用户B(w/ID 2)是朋友

希望有帮助