Я использую 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.