我在我的 Web 应用程序中使用 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。