首页 文章

jpa将儿童从收藏中删除

提问于
浏览
20

我在我的网络应用程序中使用JPA而不是Hibernate . 这是两个实体(仅显示getter):

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;
  }
}

如您所见 ParentChild 关联为"one-to-many" .

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

问候,安德烈

1 回答

  • 23

    对于JPA 2.0,您可以设置 @OneToManyorphanRemoval=true

    对于JPA 1.0,您应该使用特定于hibernate的注释 . 这是 @Cascade 注释(而不是 cascade 属性),值为

    @Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
    

    Hibernate 3.5实现了JPA 2.0

相关问题