假设我有两个实体:“组”和“用户”。每个用户可以是多个组的成员,每个组可以有多个用户。
@Entity public class User { @ManyToMany Set<Group> groups; //... } @Entity public class Group { @ManyToMany(mappedBy="groups") Set<User> users; //... }
现在,我要删除一个组(假设它有很多成员)。
问题是,当我在某个组上调用EntityManager.remove()时,JPA提供程序(在我的情况下为Hibernate) 不会从联接表中删除行, 并且由于外键约束,删除操作也会失败。在User上调用remove()可以正常工作(我想这与拥有关系的一方有关)。
那么在这种情况下如何删除组?
我想出的唯一方法是加载组中的所有用户,然后为每个用户从其组中删除当前组并更新用户。但是,对于该组中的每个用户调用update()只是为了能够删除该组,这似乎很荒谬。
Group
User
groups
users
entityManager.remove(group) for (User user : group.users) { user.groups.remove(group); } ... // then merge() and flush()