IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Hibernate] - Delete Childs On Update ?


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut [Hibernate] - Delete Childs On Update ?
    Bonjour à tous !

    Situation :
    - j'ai une relation one-to-many
    - Lecture OK : j'ai bien outer-join="true" sur mon Set
    - Delete OK
    - Update en partie PAS OK

    L'update met bien à jour les enfants et ajoute bien des enfants au besoin MAIS si je supprime un enfant de mon Set, cet enfant n'est pas supprimé de la Base. Aucune instruction DELETE de la part de Hibernate.

    Voici mes fichiers de mapping :

    Parent.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <set name="mesFils" inverse="true" cascade="all-delete-orphan" outer-join="true">
                <key>
                    <column name="parentId" precision="8" scale="0" not-null="true" />
                </key>            
                <one-to-many class="toto.Fils" />
            </set>
    Lors de l'Update, l'enfants reste dans la base de donnée ET garde l'identifiant de son père. Donc il n'est pas supprimer et garde une reference sur son père.

    Question finale :
    Comment supprimer un enfant automatiquement de la base de donnée lors d'un Update lorsque celui-ci n'est plus dans le Set de son pere ?

  2. #2
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Il faut supprimer le fils explicitement, et le supprimer de la liste du père.
    Pour plus de sûreté, je casse le lien du fils vers le père, mais je ne sais pas si c'est vraiment obligatoire.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut dommage ...
    C'est dommage que cette fonctionnalité ne soit pas possible via un Tag sur le Set ou autre...

    Merci pour l'info

  4. #4
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Attention, je me conforme strictement à la spécification EJB3.
    Si tu veux utiliser les fonctionnalités d'Hibernate, la fonctionnalité
    delete orphans pourrait répondre à ton problème.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut
    Et bien nous utilisons bien Hibernate uniquement sans les EJB3.

    cascade="all-delete-orphan" est bien sur mon Set (voir le premier post)

    Mais cela ne produit pas l'effet attendu.

    Objectif : Quand on supprime un Fils dans le Set alors il est supprimé de la base.

    Problème d'incompatibilite de configuration dans le hbm.xml ?
    - inverse="true"
    - cascade="all-delete-orphan" / cascade="all"
    - ...

    Quelqu'un a déja reussi et pourrais me montrer sa configuration hbm.xml ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Au vu de ton mapping, tu as une relation bidirectionnelle. Tu dis avoir enlevé le fils dans le Set du père. Mais as-tu enlevé la référence au père dans le fils ?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut
    non mais voici une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <set name="mesFils" inverse="true" cascade="merge,all-delete-orphan" outer-join="true">
                <key>
                    <column name="parentId" precision="8" scale="0" not-null="true" />
                </key>            
                <one-to-many class="toto.Fils" />
            </set>

    Et faire un MERGE a la place de l'Update

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/08/2014, 11h26
  2. Réponses: 1
    Dernier message: 18/04/2012, 10h31
  3. [HIBERNATE] Delete d'un objet
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 4
    Dernier message: 11/09/2010, 02h31
  4. hibernate delete lists + update
    Par bendf82 dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/10/2007, 09h20
  5. performance delete/insert vs update
    Par Dionisos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/08/2005, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo