Удаление дочернего элемента из коллекции с использованием JPA

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

20
задан Lii 3 January 2019 в 15:22
поделиться