And*_*rey 20 java orm hibernate jpa one-to-many
我在我的网络应用程序中使用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<Child> children;
  @OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade={CascadeType.ALL})
  public Collection<Child> 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.
Boz*_*zho 25
对于JPA 2.0你可以设置   orphanRemoval=true的@OneToMany
对于JPA 1.0,您应该使用特定于hibernate的注释.这是@Cascade注释(而不是cascade属性),值为
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
Hibernate 3.5+实现了JPA 2.0