我有以下实体。我希望能够删除用户和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;
}
答案 0 :(得分:0)
您应该将(cascade = CascadeType.REMOVE)添加到您的多对多关系中
就像这个例子
@ManyToMany(cascade=CascadeType.REMOVE)
答案 1 :(得分:0)
根据我对实体的理解,不应删除Group
,User
属于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选项应该处理删除子项