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 :

fonction exists en HQL


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut fonction exists en HQL
    Quelqu'un peut il me dire comment fonctionne la fonction exists en HQL.
    j'utilise une requête dont certains paramêtres ne sont pas définis.
    par exemple :
    select distinct u from Utilisateur u, ActionDiffusionBE a
    where a.acId =788 and
    ( u.utId = 20
    or u.utId = 19
    or u.utId = 17
    or u.roles.roId in (5,7,8)

    or (u.roles.roId =2 and u.roles.roId in (select rl.roId from Utilisateur chef inner join chef.roles rl where chef.utId=20 and rl.roNiv=2))
    )
    me retourne 4 enregitrements

    select ut from Utilisateur ut where ut.usine.usId = 16 and ut.roles.roId =11

    me retourne 2 enregistrements mais si j'utilise la requête suivante

    select distinct u from Utilisateur u, ActionDiffusionBE a
    where a.acId =788 and
    ( u.utId = 20
    or u.utId = 19
    or u.utId = 17
    or u.roles.roId in (5,7,8)
    or exists (select ut from Utilisateur ut where ut.usine.usId = 16 and ut.roles.roId =11)
    or (u.roles.roId =2 and u.roles.roId in (select rl.roId from Utilisateur chef inner join chef.roles rl where chef.utId=20 and rl.roNiv=2))
    ) ,
    la requête me retourne 13 enregistrements.
    Est ce un bug d'hibernate ou une mauvaise utilisation ?

  2. #2
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Hibernate ne fait que convertir ta requete HQL en SQL, donc le comportement du exist est celui de ta base de données.

    J'ai une question a quoi sert ActionDiffusionBE a parce qu'il n'y a pas de jointure avec le reste des éléments de ta requete.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    merci Bst mais je ne comprends pas bien le sens de ta première phrase.
    Concernant ActionDiffusionBE , il est utilisé juste aprés le where :

    where a.acId =788

  4. #4
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Pardon cela me semblait bizarre que tu fasses un select distinct u from Utilisateur u, ActionDiffusionBE a certes avec a. ... = mais sans lien entre u et a.

    Edit : de meme il n'y a pas de lien entre le select de ton exist et le reste de ta requete

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    Coment je peux mettre un lien entre le select de la requete exists et le reste as tu un exemple.Merci

  6. #6
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Tu peux mettre quelque chose comme :

    exists(select ut from Utilisateur ut where u.utId = ut.utId and ut.usine.usId = 16 and ut.roles.roId =11)

    A noter que dans le cas présent je ne suis pas sur de l'utilité du exists

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

Discussions similaires

  1. Fonction "exist" ?
    Par Boonichou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/07/2007, 21h30
  2. [Oracle 10i] Fonction Exists et Tableaux
    Par ftrifiro dans le forum SQL
    Réponses: 2
    Dernier message: 31/01/2007, 15h50
  3. [XML fonctions] Existent - elles?
    Par Jean_Benoit dans le forum Oracle
    Réponses: 2
    Dernier message: 10/06/2006, 20h35
  4. fonction exist
    Par jj del amorozo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/03/2006, 10h46
  5. pb avecla fonction "exists"
    Par G-rhum dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2006, 14h09

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