Hibernate - rozsirenie ON podmienky v Criteria API

Roman Zakutny roman.zakutny na gmail.com
Úterý Květen 26 01:08:01 CEST 2009


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.



Další informace o konferenci Konference