jpa将儿童从收集中删除
我在我的网络应用程序中使用JPA而不是Hibernate。 这是两个实体(仅显示getter):
class Child { 私人父母; @ManyToOne(可选=假) @JoinColumn(name =“parent_id”,referencedColumnName =“parent_id”,nullable = false,updatable = false) public Parent getParent(){ 回归父母; } } class Parent { 私人收集儿童; @OneToMany(fetch = FetchType.EAGER,mappedBy =“parent”,cascade = {CascadeType.ALL}) public Collection getChildren(){ 回归孩子; } }
如您所见, Parent
与Child
关系为“一对多”。
现在我需要加载一个Parent
实例,删除部分或全部子项并保存更改。 以下代码对我不起作用:
父p = entityManager.find(Parent.class,12345L); //加载实体 p.getChildren()清除()。 //删除所有孩子 entityManager.merge(P); //尝试保存
在上面的示例中未删除子实体。 现在我必须为每个子entityManager.remove()
手动调用entityManager.remove()
。
有没有更简单的方法来管理儿童collections? 请注意,我不想使用特定于Hibernate的function,只有纯JPA。
问候,安德烈
对于JPA 2.0,您可以设置orphanRemoval=true
对于JPA 1.0,您应该使用特定于hibernate的注释。 这是@Cascade
注释(而不是cascade
属性),值为
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
Hibernate 3.5+实现了JPA 2.0
- 如何使用Spring 3配置JPA?
- Hibernate计算具有一些标准的行
- 是什么导致org.hibernate.PropertyAccessException:setter中发生exception
- Spring和Hibernate突然将事务设置为readonly
- 部署应用程序的java.lang.AbstractMethodError(Spring 4 MVC + Hibernate 4/5)
- 一次性向所有MySQL Select Queries添加一列
- 无法从另一个maven子项目调用Hibernate / QueryDSL
- hibernate列名称问题
- Spring,JPA和Hibernate – 如何在没有并发问题的情况下增加计数器