Я использую JPA поверх Hibernate в своем веб-приложении. Вот две сущности (показаны только получатели):
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.