Zdravim.
Asi je pak nejjednodussi udelat dotaz jen
"SELECT o FROM Order o WHERE o.id = 98305", ze ktereho ziskate Order
a nasledne na tomto objektu zavolat o.getOrderEvents a o.getItems.
JF
Cituji Petr Ferschmann <[EMAIL PROTECTED]>:
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]