使用ManyToMany关系级联删除

时间:2016-05-10 21:14:07

标签: java mysql hibernate jpa

我有以下实体。我希望能够删除用户和UserGroupMap中包含该用户的任何条目也应该被删除。但是,每次我尝试删除在UserGroupMap中也有条目的用户时,我都会收到以下错误。无法删除或更新父行:外键约束失败如何实现此行为?

@Entity
public class User {

   @Id
   private Long id;

   @Column
   private String name;

   @ManyToMany(mappedBy = "users", cascade = CascadeType.All)
   private Set<Group> groups;

 }


@Entity
public class Group {

   @Id
   private Long id;

   @Column
   private String type;

    @ManyToMany
    @JoinTable(name = "UserGroupMap", 
            joinColumns = @JoinColumn(name = "groupId", referencedColumnName = "id"), 
            inverseJoinColumns = @JoinColumn(name = "userId", referencedColumnName = "id") )
   private Set<User> users;

 }

3 个答案:

答案 0 :(得分:0)

您应该将(cascade = CascadeType.REMOVE)添加到您的多对多关系中

就像这个例子

@ManyToMany(cascade=CascadeType.REMOVE)

答案 1 :(得分:0)

根据我对实体的理解,不应删除GroupUser属于Group

这意味着Group实体是父方。 删除User后,您需要将其从Group方删除。

在名为“remove”的Group实体上创建一个方法,该方法接受一个User参数,该参数是您要删除的用户。

public void remove(User user) {

    for(Iterator<User> iterator = users.iterator(); iterator.hasNext();) {
        User removeUser = iterator.next();
        /*
         * you can check here if the user is equal to the parameter user
         * if equal remove
         */
        if(removeUser.equal(user)) {
           removeUser.setGroup(null);
           iterator.remove();
        {
    }
}

答案 2 :(得分:-1)

@Entity
public class User {

   @Id
   private Long id;

   @Column
   private String name;

   @ManyToMany(mappedBy = "users", cascade = CascadeType.All, orphanRemoval=true)
   private Set<Group> groups;

 }

orphanRemoval选项应该处理删除子项