-
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 ?
-
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.
-
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
-
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
-
Coment je peux mettre un lien entre le select de la requete exists et le reste as tu un exemple.Merci
-
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
-
Merci je pense que c'est cela mon erreur.