Java jpa正在从列表中删除项
我有1-N关系(对象有一个列表),希望从列表中删除一项。使用JPA删除列表中项目的正确方法是什么 我是否必须首先更新列表并合并所有者,然后删除该项(如果我不删除该项而只是合并所有者,则孤立项将保留在DB中,对吗)?在调用merge()和remove()的顺序中,remove()和merge()的顺序重要吗 代码示例:Java jpa正在从列表中删除项,java,jpa,Java,Jpa,我有1-N关系(对象有一个列表),希望从列表中删除一项。使用JPA删除列表中项目的正确方法是什么 我是否必须首先更新列表并合并所有者,然后删除该项(如果我不删除该项而只是合并所有者,则孤立项将保留在DB中,对吗)?在调用merge()和remove()的顺序中,remove()和merge()的顺序重要吗 代码示例: List<Item> items = owner.getItems(); Item itemToRemove = items.get(index); owner.rem
List<Item> items = owner.getItems();
Item itemToRemove = items.get(index);
owner.remove(itemToRemove);
em.merge(owner);
em.remove(itemToRemove);
List items=owner.getItems();
Item itemToRemove=items.get(索引);
所有者。删除(项目删除);
em.merge(所有者);
em.remove(项目删除);
通常情况下,您不必做类似的事情
如果集合已正确映射,则应调用items.remove(itemToRemove),仅此而已
当您关闭EntityManager(这会触发向数据库写入更改)时,它会自动识别该项已从所有者处删除(孤立),并将其从数据库中删除。至少Hibernate是这样工作的,可以将DELETE_ORPHAN指定为集合映射上的级联。这就足够了:
List<Item> items = owner.getItems();
Item itemToRemove = items.get(index);
items.remove(itemToRemove);
参考资料:
- ()
[不幸的是,没有明确写出来的段落,你必须读一点字里行间的内容]
orphanRemoving=true
(JPA 2.0),则此功能应能正常工作
对于JPA1来说,没有标准的方法来处理这个问题。Hibernate有
@Cascade
,您可以在其中指定DELETE\u ORPHAN
谢谢大家的回答。你的答案非常相似,但有一些细微的差别
只是想确保我理解正确:
是的,你的结论是正确的,我只是在JPA2.0下测试。除此之外,您还可以执行owner.getItems().remove(index)@OJVM重新阅读了我的帖子,从“实际上,一个较短的(和等效的)版本是这样的:@SeanPatrickFloyd如果列表包含100万个条目怎么办?那不是很慢吗?@Ced是的,当然。但JPA的任何方法都可能会因为数据量太大而变得很慢
List<Item> items = owner.getItems();
// no need to keep a reference to the object that has to be removed
items.remove(index);