Hibernate - rozsirenie ON podmienky v Criteria API
Jozef Sevcik
sevcik na styxys.com
Úterý Květen 26 01:15:18 CEST 2009
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.zakutny na 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
Další informace o konferenci Konference