同一实体中只有一个集合的多对多?

Many-To-Many with only one Collections in the same entity?

我有以下实体:

@Entity
@Table(name = "users")
public class User {

    ...

    private List<User> connections;

    ...

}

假设有用户 AB。用户 A 决定将用户 B 添加到他的联系人列表中。 A 的连接列表必须包含用户 BB 的连接列表必须包含用户 A

考虑到我的业务逻辑,我得出的结论是必须使用多对多关系。我在 Whosebug 上发现了这个问题 (link),但这并不是我想要的。我只想在我的实体 class 中存储一个列表,而不是两个。

我该如何实现?我假设必须有两个列表才能创建多对多关系,所以我想我的决定是不正确的。

假设您的数据库中有一个 table user_users(user_1_id,user_2_id) 用于 user 之间的多对多关系,您可以这样做:

@Entity
@Table(name = "users")
public class User {
    private List<User> connections;

}

现在您可以像这样获得 getConnection getter

@ManyToMany(targetEntity=User.class)
@JoinTable(
    name="user_users",
    joinColumns=@JoinColumn(name="user_1_id", nullable=false),
    inverseJoinColumns=@JoinColumn(name="user_2_id", nullable=false)
)
public Set<ElementBean> getConnections() {
    return connections;
}

您可以像这样将用户添加到用户:

public void addConnection(User usr) {
    if (usr !=null) { 
        connections.add(usr);
        usr.getConnections().add(this); 
    }    
}