jpa removing child from collection
I'm using JPA over Hibernate in my web-app. Here are two entities (only getters are shown):
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;
}
}
As you see Parent and Child relate as "one-to-many".
Now I need to load a Parent instance, remove some or all children and save the changes. Below is code which does not work for me:
Parent p = entityManager.find(Parent.class, 12345L); // load entity p.getChildren().clear(); // remove all children entityManager.merge(p); // try to save
Child entities are not remove in the example above. Now I have to manually call entityManager.remove() for each child.
Is there any easier way to manage child collection? Please notice that I don't want to use Hibernate-specific functionality, only pure JPA.
Regards, Andrey
For JPA 2.0 you can set orphanRemoval=true of the @OneToMany
For JPA 1.0, you should use hibernate-specific annotations. That is the @Cascade annotation (instead of the cascade attribute), with a value of
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
Hibernate 3.5+ implement JPA 2.0
链接地址: http://www.djcxy.com/p/36992.html上一篇: Hibernate HQL to Criteria
下一篇: jpa将孩子从收藏中删除
