我使用相同的实体创建了关系@ManyToMany。
这是我的实体:
@Entity
@Table(name = "user")
public class User extends BaseEntity implements Serializable {
...
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "table_friends", joinColumns =
@JoinColumn(name = "userId"), inverseJoinColumns =
@JoinColumn(name = "friendId"))
private List<User> friends;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "table_friends", joinColumns =
@JoinColumn(name = "friendId"), inverseJoinColumns =
@JoinColumn(name = "userId"))
private List<User> friendsof;
我创建了一些“用户”并将它们添加到 friend 列表中:
User u1 = new User();
User u2 = new User();
User u3 = new User();
u1.getFriends().add(u2);
u1.getFriendsof().add(u2);
u1.getFriends().add(u3);
u1.getFriendsof().add(u3);
当我从列表中删除好友u1.getFriends().remove(u3)
时,一切正常。但是当我想从数据库中删除用户u3.remove()
时,u1的 friend 仍然是一样的,尽管已经在数据库中的 friend 列表是正确的。
- 删除用户后我可以刷新列表吗?
- 如果是这样,我如何知道我需要刷新哪个好友列表?
编辑:在我看来,我应该删除 (cascade = CascadeType.ALL),因为当我删除 u1 时,会删除所有配对成员。这是正确的行为吗?
最佳答案
嗯,为什么需要 2 个 friends
和 friendsOf
列表?如果你是我的 friend ,那我是你的 friend 不是很明显吗?
此外,如果您只想结束 2 个 User
之间的关系,则应该使用 u1.getFriends().remove(u3)
。
最后,如果您想删除用户。您应该创建一个 EntityManager em
并执行命令 em.remove(u3)
。该命令将删除 u3 以及关系。但是,您应该小心使用 cascade = CascadeType.ALL
。这个cascadeType意味着如果你删除u3,u1也会被删除。我认为你应该将其保留为 @ManyToMany
而不进行级联。
关于java - 从 @ManyToMany 列表中删除对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8654234/