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 :

API Criteria many-to-many


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut API Criteria many-to-many
    Bonjour a tous,

    voilà mon problème,

    j'ai deux tables + 1 de relation

    table1 :prof
    profId
    profNom
    relation : prof_eleve
    profId
    eleveId
    table2 : eleve
    eleveId
    eleveNom

    j'aimerai pouvoir récupérer tout les élèves qui ont un prof 'x' et 'y'

    j'ai essayé ceci pour le moment, mais sa me donne les élèves qui ont un prof 'x' ou 'y'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Criteria criteria = getSession().createCriteria (eleve.class);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
     
    criteria.createCriteria("prof").add (
                 Restrictions.disjunction ()
                          .add(Restrictions.eq("profNom","x"))
                          .add(Restrictions.eq("profNom","y"))
    );

    merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .add(Restrictions.and(
                Restrictions.eq("profNom","x"),
                Restrictions.eq("profNom","y")
         ));

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    Bonjour,

    sa ne fonctionne pas, je n'ai aucun résultat

    pour la clause where générée par hibernate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    where 
           eleve.eleveId = prof_eleve.eleveId
           and prof_eleve.profId = prof.profId
           and (
                 prof.profNom = 'x' 
                 and prof.profNom = 'y'
           )
    si je retire la dernière condition,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    where 
           eleve.eleveId = prof_eleve.eleveId
           and prof_eleve.profId = prof.profId
    j'ai ceci comme résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    profNom       eleveNom
        x                eleveA
        y                eleveA
        y                eleveB
        z                eleveC
    le but est de récupérer uniquement l'éleveA

  4. #4
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut
    Bonjour,

    Moi j'essaierais bien une conjunction (A and B) au lieu d'une disjunction (A or B).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Conjunction vConj = Expression.conjunction();         
    vConj.add( Expression.eq("profNom","x"));  
    vConj.add( Expression.eq("profNom","y"));  
    criteria.add(vConj);

  5. #5
    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
    Bonsoir,

    Je ne pense pas que tu puisse obtenir un résultat concluant avec des criterias.
    Les clauses de condition que tu places sur l'attribut 'profNom' s'appliquent simultanément pour chaque ligne de la table Professeur trouvée (quel que soit la méthode : conjunction , disjunction, or, and ...).
    Tu as un matching : un élève-> un professeur.

    Alors que pour résoudre ton besoin, il faudrait un matching entre deux lignes de professeurs pour un même élève.
    Sauf que les criterias ne permettent pas d'utiliser un même chemin d'association deux fois dans une même requête.

    Aussi, à ta place, je passerais par du hql.
    C'est assez simple à faire : il suffit de faire deux jointures avec la table Professeur dans la requête : on a ainsi deux lignes de Professeur et on peut faire le matching un eleve-> deux professeurs.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    Bonjour a tous,

    j'ai déjà essayé avec les conjonction, et sa ne fonctionne pas

    thebloodyman :

    j'ai un peu simplifié l'exemple. j'ai d'autre filtres qui sont fait avec les criteria
    un example, on peux demander de sélectionner tout les éleves ayant un nom
    'name' et qui ont comme prof 'x' et 'y'. tout les autres filtres fonctionne sauf
    lorrsqu'on fait un filtre avec 2 profs.

    est t-il possible de faire ces jointures avec les criteria et expression.sql ?

    merci.

Discussions similaires

  1. One-to-many, order by et API criteria
    Par v4np13 dans le forum Hibernate
    Réponses: 6
    Dernier message: 17/05/2011, 08h18
  2. Réponses: 0
    Dernier message: 15/05/2009, 11h48
  3. Criteria et many to many
    Par *alexandre* dans le forum Hibernate
    Réponses: 6
    Dernier message: 17/09/2008, 15h07
  4. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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