Я использую 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.
С уважением, Андрей