J'utilise JPA sur Hibernate dans mon application web. Voici deux entités (uniquement getters sont représentés):jpa retirer un enfant de la collection
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; } }
Comme vous le voyez Parent
et Child
rapportez comme "one-to-many".
Maintenant, j'ai besoin de charger une instance Parent
, supprimer une partie ou tous les enfants et enregistrer les modifications. Ci-dessous le code qui ne fonctionne pas pour moi:
Parent p = entityManager.find(Parent.class, 12345L); // load entity p.getChildren().clear(); // remove all children entityManager.merge(p); // try to save
Les entités enfants ne sont pas supprimées dans l'exemple ci-dessus. Maintenant, je dois appeler manuellement entityManager.remove()
pour chaque enfant.
Existe-t-il un moyen plus simple de gérer la collecte des enfants? Veuillez noter que je ne souhaite pas utiliser la fonctionnalité spécifique à Hibernate, mais uniquement JPA pure.
Cordialement, Andrey
double possible de [JPA CascadeType.ALL ne supprime pas les orphelins.] (Http: //stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans) –