Я использую 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 children;
@OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade={CascadeType.ALL})
public Collection 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.
С уважением, Андрей