jpa 从列表中删除项目

2022-09-01 20:01:30

我有1-N关系(对象有一个列表),并希望从列表中删除一个项目。使用 JPA 删除列表中的项目的正确方法是什么?

我是否必须首先更新列表并合并所有者,然后再删除项目(如果我不删除项目而只是合并所有者,则孤立项将保留在数据库中,对)?在什么顺序中应该调用merge()和remove(),remove()和merge()的顺序重要吗?

代码示例:

List<Item> items = owner.getItems();
Item itemToRemove = items.get(index);
owner.remove(itemToRemove);
em.merge(owner);
em.remove(itemToRemove);

答案 1

这应该适用于您有(JPA 2.0)的情况。orphanRemoval=true

对于 JPA 1,没有标准的方法来处理这个问题。休眠具有可以指定的位置@CascadeDELETE_ORPHAN


答案 2

这就足够了:

List<Item> items = owner.getItems();
Item itemToRemove = items.get(index);
items.remove(itemToRemove);

刷新 时,将删除 和 之间的链接。如果设置为 ,则 itemToRemove 也将被删除。EntityManagerowneritemToRemovecascadeCascadeType.ALL

实际上,一个更短(和等效)的版本是这样的:

List<Item> items = owner.getItems();
// no need to keep a reference to the object that has to be removed
items.remove(index);

参考:


推荐