Cha*_*hew 7 java hibernate jpa set spring-data-jpa
我在我的父实体中有一个Set,如下所示:
Class Parent {
@OneToMany(mappedBy = parent, cascade = CasacadeType.ALL)
Set<Child> children;
}
Class Child {
@Column(nullable=false)
@ManyToOne
Parent parent;
}
Run Code Online (Sandbox Code Playgroud)
现在事件,如果我对其中一个元素的Set执行remove()操作,它实际上不会被删除.
您的映射应如下所示:
public class Parent {
@OneToMany(mappedBy = parent, cascade = CasacadeType.ALL, orphanRemoval = true)
private Set<Child> children = new HashSet<>();
public void removeChild(Child child) {
children.remove(child);
child.setParent(null);
}
}
public class Child {
@ManyToOne
private Parent parent;
}
Run Code Online (Sandbox Code Playgroud)
正如上文这篇文章,因为你有一个双向关联,你必须有双方同步.
因此,最好打电话:
parent.removeChild(child);
Run Code Online (Sandbox Code Playgroud)
这样一来,removeChild
是要去除Child
从children
集,并设置Set
的Child
关联parent
.
我遇到了同样的问题,虽然使用 remove 和 setParent 为 null,但相关数据仍然在 db 中。调试后,我看到无法从父级的子级列表中删除相关的子级对象。当我在网上搜索“hibernate set remove not working”时,我发现了 hibernate 的真相:remove 方法有一些错误,因为 hashcode 和 equals 方法。看到之后我想也许 removeAll() 方法可以正常工作。我将相关的一个对象放入列表并将列表放入 removeAll 方法,它成功了。举个例子:
List childList = new ArrayList();
childList.add(child);
parent.removeAll(childList);
child.setParent(null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3867 次 |
最近记录: |