Bonjour,

Le sujet à déjà été traité mais jamais d'une façon claire :

Voila j'ai un parent qui à plusieurs fils


Parent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
@OneToMany(targetEntity=Fils.class,mappedBy="parent",cascade={CascadeType.ALL})
    private Set<Fils> fils = new HashSet<Fils>();
FILS


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
@ManyToOne(optional=false)
    @JoinColumn(name="Parent_CODE",nullable=false,referencedColumnName="CODE")
    private Parent parent;

Pour moi l'avantage des JPA c'est de ne plus se préoccuper de l'intégrité référentielle hors c'est pas ce que je constate

Quand je supprime un parent il faut que tous les fils soient supprimer automatiquement

hors

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Parent p = //parent que je veux supprimer
em = emf.createEntityManager();
            em.getTransaction().begin();
            Query q = em.createNamedQuery(REM_PARENT);
            q.setParameter("code", p.getCode());
            q.executeUpdate();
            em.getTransaction().commit();
            em.close();
Mais la ça ne marche pas pour une raison évidente d'intégrité ......

ja suis obligé de faire une boucle pour supprimer les fils un à un pour que ça marche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Parent p = //parent que je veux supprimer
em = emf.createEntityManager();
            em.getTransaction().begin();
            for (Fils f : a.getFils())
                em.remove(em.find(Fils.class, f.getId()));
            Query q = em.createNamedQuery(REM_PARENT);
            q.setParameter("code", p.getCode());
            q.executeUpdate();
            em.getTransaction().commit();
            em.close();
Ou est la logique ? et que l'offre les JPA dans ce cas. ?

Merci