Zdravím, obávám se, že toto fungovat nebude. Původně jsem měl představu, že to takto bude fungovat, ale není to pravda. Hibernate dokáže takto načíst jen jeden záznam (tj. bez posledního items). Třetí již nedokáže filtrovat. Proto bych doporučil to udělat bez ní a zkusit použít batch loading - tj. poslední záznam ne-fetchovat a nechat hibernate, aby to načetl sám v jednom dalším dotazu.
Případně udělat vlastní result transformer (nevím zda to není jen hibernate specifické), a opravit si to sám. Bohužel někdy u složitějších dotazů ještě ORM nefungují automaticky na sto procent. S pozdravem Petr Ferschmann Jiri Frydek píše v Út 31. 07. 2007 v 15:32 +0200: > Zdravim, > proc vyuzivate INNER JOIN FETCH. Nestacil by LEFT JOIN FETCH? To by > melo Vas problem vyresit. > > JF > > Cituji jan_bar <[EMAIL PROTECTED]>: > > > Zdravím, > > > > mám EJB3 entitu Order, která má 1:N vztah na Item (je to List) a též 1:N na > > OrderState (je to Set, stav ve kterém se nachází Order). Oba vztahy jsou > > lazy loaded. Chci jedním EJB QL natáhnout Order včetně všech Items a > > OrderStates: > > "SELECT DISTINCT o FROM Order o" + > > " INNER JOIN FETCH o.orderEvents e" + > > " INNER JOIN FETCH o.items i" + > > " WHERE o.id = 98305" > > > > Order 98305 má jeden Item a dvě OrderEvents. Výsledný Order.items ale > > obsahuje 2x stejnou instanci Item. Je to zřejmě proto, že SQL vrátí dva > > řádky, každý pro jeden OrderEvent a ORM mi z toho udělá též dvě (stejné) > > položky v seznamu items. Možná by problém vyřešilo použít Set místo List na > > items, ale to nechci (items jsou řazeny podle čísla). > > > > Snad jsem problém popsal dostatečně. Nevím zda je toto vlastnost EJB3 ORM a > > nevím jak to elegantně vyřešit. > > > > (JBoss 4.2.GA) > > > > Díky, Honza > > > > -- > > Jan Bares > > http://jan.vegetband.cz > > > > > > > > > > > Petr Ferschmann SoftEU s.r.o. ----------------------------------- Bolevecká 6 301 00 Plzen Czech Republic ----------------------------------- Phone: +420 373 731 284 +420 373 729 300 Fax: +420 373 729 301 Cell: +420 775 638 008 E-mail: [EMAIL PROTECTED]
