Transparentni reseni pro klienta je pomerne slozite, nezkousel jsem to, viz:
http://h3t.sourceforge.net/ http://community.jboss.org/wiki/RemoteLazyLoading http://www.theserverside.com/news/1363571/Remote-Lazy-Loading-in-Hibernate Ja to resim manualne - mam pro kazdou entitu statickou metodu, ktera dotaha, co je potreba. Zbyvajici kod na klientovi pak jen zavola tuto jednu metodu - tedy jen jeden radek kodu navic. Zaklad je toto: public static <T extends BaseEntity> T initEntity(T entity, GenericDao<T> dao) { if (Hibernate.isInitialized(entity)) { return entity; // already initialized } return dao.getById(getIdDirect(entity)); } public static Integer getIdDirect(BaseEntity entity) { if (entity instanceof HibernateProxy) { LazyInitializer lazyInitializer = ((HibernateProxy) entity).getHibernateLazyInitializer(); if (lazyInitializer.isUninitialized()) { return (Integer) lazyInitializer.getIdentifier(); } } return entity.getId(); } kde dao.getById(getIdDirect(entity)); je ziskani entity pres jeji ID. Tedy neni to pro kolekce, to jsem zatim nepotreboval. Spise se snazim klientovi vratit vse, co je potreba. Toto pouzivam zatim jen na zobrazeni tooltipu a podobnych mene podstatnych informaci. Pokud se entity meni, tak je myslim lepsi toho nacist vzdy co nejvice v jedne transakci. Mezi ruznymi transakcemi nekdo jiny muze data zmenit a z toho mohou byt problemy. 2010/9/17 Pavel Nemec <[email protected]>: > No ano, problem je lazy loading. Rad bych klienty odstinil od zpusobu > persistence (je to mimo jine i pozadavek) a nechci tedy aby si museli > dotahovat nejake kusy na zaklade vyjimky "session is closed", nebo aby > takovou vyjimku vubec museli chytat. > > O DTO a potazmo apache commons beanutils jsem nevedel, urcite na to > mrknu. Mohlo by to pomoci pri reseni. > > Dik > Pavel > > Dne 17. září 2010 13:10 Ondra Medek <[email protected]> napsal(a): >> Ahoj, >> >> a kde je problem: lazy reference neni serializable nebo ti vadi, ze >> klient si pak nedokaze ty lazy reference sam dotahat? Oba pripady jdou >> resit. Pripadne pri prevadeni entit do DTO muze slouzit Apache commons >> beanutils - pak se to lehce zautomatizuje. >> -- >> Ondra Medek >> >> >> >> >> 2010/9/17 Pavel Nemec <[email protected]>: >>> Zdravim konferencei. >>> >>> Mam takovy pekny zapeklity problem. Na serveru pouzivame jako backend >>> sql+hibernate. Data cestuji pomoci jboss+rmi na tlusteho klienta. Tech >>> je radove stovky a tak neni ani zdaleka problem ve vykonosti databaze >>> nebo jboss serveru. Vse to funguje pomerne pekne. >>> >>> V soucasne chvili pracujeme na dalsi verzi a reviduji soucasne postupy. >>> >>> Muj problem je ze pokud objekt nactu z hibernate obsahuje spoustu >>> proxy a lazy loaded pod-objektu (kolekci). Zkousel jsem dohledat >>> nejake doporucene postupy jak s tlustym klientem pracovat s hibernate, >>> ale nenalezl jsem nic uzitecneho. >>> >>> Nevidim cestu jak poslat objekty obsahujici lazy reference na klienta >>> (pres rmi) a jedinou cestu jak z toho vidim prekladat do klientskych >>> obrazu techto objektu. To sebou nese samozrejme preklad a dva typy >>> objektu. >>> >>> Na druhou stranu to nenuti klienta resit cokoliv s hibernate. >>> Premyslel jsem take osekat Ukladane objekty a vse nahravat pomoci >>> EAGER. Ale bojim se ze ani to neni cesta, protoze to Ukladane objekty >>> prilis svaze. >>> >>> Rad bych si usetril praci. A tak hledam reference na to jak to delaji >>> ostatni, pripadne cemu se rovnou vyhnout. >>> >>> Dik, >>> Pavel >>> >> > -- Ondra Medek
