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 :

Requête avec plusieurs tables en relation avec Hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 191
    Par défaut Requête avec plusieurs tables en relation avec Hibernate
    Salut tout le monde ,

    Je suis encore débutant en JSF et hibernate , pour récupérer une liste de données en DAO par exemple pour table personne en écrit dans la partie de l'implémentation dans une methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public List getPersonnes(String nom){
     
    Criteria crt =getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(Notes_ee.class);
     
    crt.add(Restrictions.eq ("nom", nom)) ;
     
    }
     
    return crt.list();
     
    	}
    ça c'est facile mais mon problème c'est ce que j'ai plusieurs tables en relations et je sais pas comment je peut extraire le résultat :

    j'ai 3 tables :


    • Personne (idPersonne , #idDepartement ,nom , prenom ,cin ,telephone,...)


    • Departement(idDepartement, nomDepartement,specialite, description,chef,...)


    • Fiche(idFiche ,#idPersonne ,...)



    La requête que je veux l'exécuter est : à partir d'un idDepartement (par exemple idDepartement =1023521) , je veux extraire tous les fiches de cette département , comment je peux traduire cette requête en hibernate .
    s.v.p c'est urgent et merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    Si c'est en hibernate que tu veux faire la requête, on a davantage besoin de ton mapping hibernate que ton mapping sql puisque c'est à partir des relations hibernate qu'on va définir la requête.

    A partir de ton schéma relationnel, on va supposer que :
    - ton entité fiche a une relation ???ToOne avec l'entité personne.
    - ton entité personne a une relation ManyToOne avec l'entité département.

    A partir de la, on a un schéma de navigation :
    fiche->personne->département.
    On a plus qu'à créer cela sous Hibernate et d'ajouter la condition sur l'id departement.

    J'ai fais cela en criteria pour garder la logique de ton 1er exemple.

    J'ai pas le nom de ta classe Fiche, ni le nom des champs de relation entre entités.
    Donc j'ai inventé : Fiche.java, champ "personne" dans la classe Fiche et champ "departement" dans l'entité Personne.
    A remplacer le cas échéant.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int idDepartement = 15;
     
    Criteria criteria = getHibernateTemplate()
                           .getSessionFactory()
                           .getCurrentSession()
                           .createCriteria(Fiche.class)
                           .createCriteria("personne", "pers")
                           .createCriteria("pers.departement","dep")
                           .add(Restrictions.eq("dep.id", idDepartement);

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 191
    Par défaut
    merci pour la réponse , mais comment sous Hibernate ajouter la condition sur l'id departement.
    avec les attributs des classes Personne , Departement , Fiche prends les mêmes nom des champs des tables Personne , Departement , Fiche

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Relis mon exemple.
    A la fin tu as la clause sur l'id du departement :
    .add(Restrictions.eq("dep.id", idDepartement);

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 191
    Par défaut
    s.v.p qu'elle est la nature de pers et dep ,
    est ce qu'ils sont les nom des tables respictivement Personne et Departement ou ils sont des extensions ...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    est ce qu'ils sont les nom des tables respictivement Personne et Departement ou ils sont des extensions ...
    Surtout pas. En criteria (et hql), tu n'utilises pas le noms des tables mais le nom des des champs. C'est le champ qui va résoudre au final la table utilisée derrière (via le mapping orm).

    Ce sont des alias pour comme en sql éviter les collisions de noms et ici c'est aussi pour documenter clairement la relation entre les entités et les champs de relation.


    Ici
    .createCriteria(Fiche.class)
    .createCriteria("personne", "pers")
    , je fais la jointure entre la table fiche et personne en naviguant vers le champ "personne" de la classe Fiche.
    Et je créé un alias "pers" que je réutilise en dessous pour la seconde jointure entre personne et département:
    .createCriteria("pers.departement","dep")

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2013, 13h57
  2. [AC-2003] Plusieurs tables en relation avec une même table
    Par Invité dans le forum Modélisation
    Réponses: 9
    Dernier message: 20/04/2012, 11h37
  3. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 08h50
  4. Réponses: 4
    Dernier message: 26/09/2006, 18h28
  5. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42

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