Takže v business vrstve voláte také niečo ako ten filter?
session = getSession(sessionFactory);
TransactionSynchronizationManager.bindResource(sessionFactory, new
SessionHolder(session));
{
metodaDAO1();
metodaDAO2();
}
TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.releaseSession(session, sessionFactory);
Pochopil som to správne?
Rastislav "Bedo" Siekel.
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Roman Pichlik
> Sent: 16. marca 2006 15:43
> To: Java
> Subject: Re: Spring, Hibernate a HibernateTemplate
>
>
> Pokud nepouzijete ten zmineny filter, tak je otevreni a
> zavreni session
> omezene na transakci. Ve vasem pripade mate transakci
> nastavenou na DAO
> objektu.
>
> Ja osobne to resim tak, ze transakce je na urovni business vrstvy, to
> znamena ze session je otevrana po dobu prace v business logice.
> Napriklad UI vrstva, ktera je nad business vrstvou uz ma
> session uzavrenou.
>
> Vrstvy
> -----------
> UI | Uzavrena session
> ----------- --- definice transakce
> Business |
> ---- | Otevrena session
> DAO V
> ----------- ---
>
> Rastislav Siekel napsal(a):
> > Kolegovia,
> >
> > začínam s Hibernate a mám problém samozrejme s
> > LazyInitializationException. Mám v Springu potomka
> > HibernateDaoSupport, kde mám DAO metódu, ktorá vracia List.
> Nejako takto:
> > ...
> > HibernateTemplate template = getHibernateTemplate();
> > List list = template.find("from EngineStationTO");
> > ...
> >
> > Ten EngineStationTO obsahuje aj nejaké asociácie, ktoré sa
> pri default
> > nastavení lazy select fetching samozrejme nenačítajú.
> Sranda je však
> > tá, že samotná metóda find() zatvára session a teda nemám možnosť
> > dotiahnuť tie asociácie žiadnym spôsobom (napr.
> > Hibernate.initialize(list) ) takže vždy dostanem
> > LazyInitializationException.
> >
> >
> > Pozeral som sa, ako to rieši napr. Springový web filter
> > OpenSessionInViewFilter. Ten na začiatku requestu použije:
> >
> > session = getSession(sessionFactory);
> > TransactionSynchronizationManager.bindResource(sessionFactory, new
> > SessionHolder(session)); a na konci:
> > TransactionSynchronizationManager.unbindResource(sessionFactory);
> >
> > ale mimo web aplikácie? Zdá sa mi, že by to mohlo ísť aj
> jednoduchšie.
> > Samozrejme, môžem zakázať lazy inicializáciu, alebo nakonfigurovať
> > objekty bez asociácií, ale to by bola škoda.
> >
> > Rastislav "Bedo" Siekel.
> >
> > _____
> >
> > Ing. Rastislav Siekel
> > Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
> > E-mail : <mailto:[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
> > Tel : 041/562 54 91
> > Fax : 041/562 54 97
> > Mobil : 0905 34 00 20
> >
> >
>
> --
> S pozdravem Roman "Dagi" Pichlik
>
> /* http://www.sweb.cz/pichlik/ Blog pro kodery */
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security
> System. For more information please visit
> http://www.messagelabs.com/email
> ______________________________________________________________________
>