使用JPA从集合中删除孩子

我在Web应用程序中通过Hibernate使用JPA。这是两个实体(仅显示吸气剂):

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;

}

}

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

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

回答:

对于JPA 2.0你可以设置

orphanRemoval=true@OneToMany

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

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

Hibernate 3.5+实现JPA 2.0

以上是 使用JPA从集合中删除孩子 的全部内容, 来源链接: utcz.com/qa/401076.html

回到顶部