v HQL sa to robi pomocou klauzule 'WITH':
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0

Pozrite sa, ci ma tato klauzula Criteria ekvivalent


2009/5/26 Roman Zakutny <roman.zaku...@gmail.com>
>
> Zdravim,
>
> uz dlhsi cas sa mi nedari ani za pomoci Googlu!!!:) prist na sposob, ako 
> dokazem rozsirit ON podmienku pri joinovani entit pomocou Criterii v 
> Hibernate. Nepomohol mi ziadny sposob v kombinacii s createAlias(...) a 
> createCriteria(...). Problem je, ze sa ta podmienka stale objavi az v 
> klauzule WHERE. Predstavit sa to da na dvoch entitach COMPANY a USER vo 
> vztahu 1:N.
>
> @Entity
> class Company {
>        ...
>        public Set<User> getUsers() { return users };
>        ...
> }
>
> V praxi potrebujem dosiahnut obmedzenie tejto mnoziny Userov. Napriklad 
> chcem, aby mi vratil iba tych, ktorych vek je viac ako 40 rokov. Tym, ze sa 
> mi tato podmienka stale ocitne vo WHERE, tak to sposobi, ze pokial tam taky 
> User neexistuje, tak takato Company sa odignoruje a ja ju napriek tomu 
> potrebujem, avsak s prazdnou mnozinou Userov. Takze chcem omedzenie na jednu 
> najoinovanu tabulku a nie na cely zaznam...
>
> Nezafungoval mi ani nasledny dotaz
>
> getSession().createCriteria(Company.class)
>        .createCriteria(User.class, "u", Criteria.LEFT_JOIN)
>        .add(Restrictions.gt("u.age", 40));
>
> , ktory mi vratil
> SELECT * FROM company c LEFT OUTER JOIN user u ON c.id_company = u.id_company 
> WHERE u.age > 40
>
> , ale ja potrebujem
> SELECT * FROM company c LEFT OUTER JOIN user u ON (c.id_company = 
> u.id_company AND u.age > 40)
>
> Ma s tym niekto skusenost? Znie to velmi jednoducho, ale...
>
> Vdaka za kazdy napad:)
>
> S pozdravom Roman.



--
Jozef

Odpovedet emailem