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(){
    回归孩子;
   }
 }

如您所见, ParentChild关系为“一对多”。

现在我需要加载一个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