同一实体中只有一个集合的多对多?
Many-To-Many with only one Collections in the same entity?
我有以下实体:
@Entity
@Table(name = "users")
public class User {
...
private List<User> connections;
...
}
假设有用户 A 和 B。用户 A 决定将用户 B 添加到他的联系人列表中。 A 的连接列表必须包含用户 B,B 的连接列表必须包含用户 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);
}
}
我有以下实体:
@Entity
@Table(name = "users")
public class User {
...
private List<User> connections;
...
}
假设有用户 A 和 B。用户 A 决定将用户 B 添加到他的联系人列表中。 A 的连接列表必须包含用户 B,B 的连接列表必须包含用户 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);
}
}