jpa从集合中删除孩子
问题描述:
我在我的web-app中使用JPA而不是Hibernate。这里有两个实体(仅干将显示):jpa从集合中删除孩子
class Child { private Parent parent; @ManyToOne(optional=false) @JoinColumn(name="parent_id", referencedColumnName="parent_id", nullable=false, updatable=false) public Parent getParent() { return parent; } } class Parent { private Collection children; @OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade={CascadeType.ALL}) public Collection getChildren() { return children; } }
正如你看到的Parent
和Child
涉及为“一到多”。
现在我需要加载一个Parent
实例,删除一些或全部子节点并保存更改。下面的代码不为我工作:
Parent p = entityManager.find(Parent.class, 12345L); // load entity p.getChildren().clear(); // remove all children entityManager.merge(p); // try to save
子实体未在例如删除上面。现在我必须为每个孩子手动拨打entityManager.remove()
。
有没有更简单的方法来管理儿童收集?请注意,我不想使用Hibernate特有的功能,只使用纯粹的JPA。
问候, 安德烈
答
对于JPA 2.0你可以设置的@OneToMany
orphanRemoval=true
对于JPA 1.0,你应该使用专用的休眠注解。这是@Cascade
注释(而不是cascade
属性),与
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
值
休眠3.5+实施JPA 2.0
的[JPA CascadeType.ALL不会删除孤儿。](HTTP
可能重复: //www.stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans) – 2010-09-17 21:40:18