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 :

Retrouver le père quand on a le fils


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Par défaut Retrouver le père quand on a le fils
    Bonjour,

    J'ai mappé dans hibernate une relation père-fils de façon à ce que l'objet père ait un set de fils. En effet, je pars la plupart du temps du père pour retrouver le fils, et je n'ai pas eu, sur le moment, besoin de mettre en place une relation bi-directionnelle.

    J'ai donc:

    Père :
    - a une liste de fils
    - a certaines propriétés

    Fils :
    - a une liste de propriétés
    - n'a pas de lien vers le père

    (je sais qu'on peut mettre en place le lien vers le père en mettant un reversed=true, mais j'aimerai l'éviter)

    Bref, ma question est :

    Si j'ai le fils, comment retrouver le père? Je n'ai pas de préférence entre le get basique, HQL ou l'API Criteria. Je cherche juste une solution...

    Merci!

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    En HQL qq chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select
       p 
    from 
       parent p 
       inner join p.fils f
    where
       f.id = idDuFils

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Par défaut
    Je ne suis pas sûr car la ton père ne semble avoir qu'un fils, je me trompe?

    Voici en claire (en Java) ce que j'ai :
    ...etc.
    public class Pere implements Serializable {

    ...etc.

    private Set<Fils> fils;

    ...etc...getters et setters

    }
    ...etc.
    public class Fils implements Serializable {

    ...etc.

    // Pas de lien vers le père!

    ...etc...getters et setters

    }
    La config hibernate :
    <class name="fr.machin.Pere" table="table_pere" lazy="false">
    <id type="long" column="id_pere" name="id_pere" unsaved-value="-1">
    <generator class="GeneratorClasse"/>
    </id>
    ...etc.
    <set name="souscriptions">
    <key column="fk_pere" not-null="true"/>
    <one-to-many class="fr.machin.Fils"/>
    </set>
    </class>

    <class name="fr.machin.Fils" table="table_fils" lazy="false">
    <id type="long" column="id" name="id">
    <generator class="identity"/>
    </id>
    ...etc.
    </class>
    Donc le père a une liste de fils. Mais en partant du fils, comment retrouver le père?

    J'essaie quand même ton HQL, mais je ne suis pas sûr de comprendre le p.fils...

  4. #4
    Membre averti
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Par défaut
    Ok toutes mes excuses, la requête HQL marche impec.

    Mais j'aimerai bien qu'on m'explique le coup de p.fils... Car pour moi, fils en question est une liste! Comment fils.id peut être reconnu...

    enfin, ça marche, merci!

  5. #5
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Le p.fils se traduit en SQL par une simple jointure entre la table du père et celle du fils. Sans autre restriction, cela te donne le produit cartésien des deux tables, donc tout les tuples :
    pere1 fils1
    pere1 fils2
    pere2 file3
    ...

    Si un fils est bien rattaché à un seul père, l'id du fils permet de filtrer et de ne ramener qu'un seul enregistrement. Il ne faut donc pas voir la notation "p.fils" comme désignant un fils particulier du père, mais plutôt tout les fils. Dans le where, le "fils.id" désigne l'id d'un des fils.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/06/2014, 17h20
  2. [pthread] relation père - fils ?
    Par jedimind dans le forum C
    Réponses: 3
    Dernier message: 14/11/2005, 11h18
  3. [MFC] multithread, communication père<->fils
    Par Joeleclems dans le forum MFC
    Réponses: 19
    Dernier message: 19/05/2005, 10h31
  4. Synchronisation inter objet (du fils vers le père)
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 13/04/2005, 11h19

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