java - 从 @ManyToMany 列表中删除对象的正确方法

标签 java jpa persistence eclipselink

我使用相同的实体创建了关系@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 列表是正确的。

  1. 删除用户后我可以刷新列表吗?
  2. 如果是这样,我如何知道我需要刷新哪个好友列表?

编辑:在我看来,我应该删除 (cascade = CascadeType.ALL),因为当我删除 u1 时,会删除所有配对成员。这是正确的行为吗?

最佳答案

嗯,为什么需要 2 个 friendsfriendsOf 列表?如果你是我的 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/

相关文章:

java - Android 中的 JSON 数据加密和解密

java - 如何解决这个hibernate运行时异常?

java - 将 Java XML 和持久性注释放在同一个 bean 上是否有效?

javascript - persistence.js add() 函数不起作用

java - 当你更新它的子版本时,如何级联更新@Version?

java - 如何在 Android 10 中打开 Activity (传入 voip 调用)

Java Hibernate sqlGroupProjection mysql 语法错误

java - 连接错误 JPA 和named_queries xml 的预期路径

java - 两个具有相同自动生成 ID 的表

java - 使用 eclipselink 和 java.sql 的 JPA : when connect to DB