jpa retirer l’enfant de la collection

J’utilise JPA sur Hibernate dans mon application Web. Voici deux entités (seuls les accesseurs sont affichés):

 classe Child {

   parent privé parent;

   @ManyToOne (optionnel = false)
   @JoinColumn (name = "parent_id", referenceColumnName = "parent_id", nullable = false, updatable = false)
   public Parent getParent () {
     parent de retour;
   }
 }

 classe Parent {

   Collection privée enfants;

   @OneToMany (fetch = FetchType.EAGER, mappedBy = "parent", cascade = {CascadeType.ALL})
   collection publique getChildren () {
     retourner les enfants;
   }
 }

Comme vous le voyez, Parent et Child rapportent comme “un à plusieurs“.

Maintenant, je dois charger une instance Parent , supprimer certains enfants 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);  // charge l'entité
 p.getChildren (). clear ();  // enlève tous les enfants
 entityManager.merge (p);  // essaie de sauver

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 les fonctionnalités spécifiques à Hibernate, mais uniquement du JPA pur.

Cordialement, Andrey

Pour JPA 2.0, vous pouvez définir orphanRemoval=true sur le @OneToMany

Pour JPA 1.0, vous devez utiliser des annotations spécifiques à hibernate. C’est l’annotation @Cascade (au lieu de l’atsortingbut cascade ), avec une valeur de

 @Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN}) 

Hibernate 3.5+ implémente JPA 2.0