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 :

OR sur 2 sous Criteria [Criteria]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut OR sur 2 sous Criteria
    Bonjour à tous,

    j'ai un model du type Personne - Fils [Nom]
    |
    Fille [Nom]

    Je cherche à faire une requête en criteria hibernate sur le nom d'un enfant
    Ex en hql : FROM Personne p WHERE p.fils.nom = :nom OR p.fille.nom = :nom;

    En criteria :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Criteria criteriaRequete = session.createCriteria(Personne.class);
    Criteria criteriaFils = criteriaRequete.createCriteria("fils");
    Criteria criteriaFille = criteriaRequete.createCriteria("fille");
    criteriaFils.add(Restrictions.like("nom", "%" + nom+ "%").ignoreCase());
    criteriaFille.add(Restrictions.like("nom", "%" + nom+ "%").ignoreCase());
    Je me retrouve tout naturellement avec un AND ...
    J'ai essayé de fouiller dans les sous requêtes mais sans grand succes

    Une idée ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    En créant un alias et pas un autre criteria:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Criteria criteriaRequete = session.createCriteria(Personne.class);
    criteriaRequete.createAlias("personne.fils","fils");
    criteriaRequete.createAlias("personne.fille","fille");
    criteriaRequete.add(
    Restrictions.or(
    Restrictions.like("fils.nom", "%" + nom+ "%").ignoreCase(),
    Restrictions.like("fille.nom", "%" + nom+ "%").ignoreCase()
    ));
    ?

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il faut que tu passes par des alias, et utiliser Restriction.disjunction ou bien Expression.or, quelque chose qui ressemblerait à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Criteria criteriaRequete = session.createCriteria(Personne.class);
    criteriaRequete.createAlias("fils","f1");
    criteriaRequete.createAlias("fille","f2");
     
    Disjunction orCrit= Restrictions.disjunction();
    Criterion filsCrit = Restrictions.like("f1.name",nom);
    Criterion filleCrit= Restrictions.like("f2.name",nom);
    orCrit.add(filsCrit);
    orCrit.add(filleCrit);
    criteriaRequete.add(orCrit);

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Bon j'avais déjà regardé sans grand résultat les alias ...
    mais suite à vos avis unanimes je me suis replongé dedans

    Alors en fait la subtilité est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    criteriaRequete.createAlias("fils","f1");
    va générer un inner join en sql
    ce qui me posait soucis car j'avais des nulls en bdd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    criteriaRequete.createAlias("fils", "f1",Criteria.LEFT_JOIN);
    fonctionne mieux dans mon cas.

    Un grand merci à vous pour vos réponses

    Pour info cette solution marche bien en empilant plusieurs alias les un sur les autres.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2009, 13h49
  2. Réponses: 9
    Dernier message: 18/08/2005, 13h16
  3. [HTML] Height à 100% sur Img sous IE
    Par lord_paco dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/08/2005, 11h04
  4. QUESTION SUR AVG, Sous Access
    Par sylvaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2003, 13h51
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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