Asi ano, nedokazu to rici, protoze transakce pouzivam deklarativne.
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="businessObject" parent="baseTransactionProxy">
<property name="target">
<bean class="com.foo.BusinessObject">
<property name="catDao"><ref local="dao1"/></property>
<property name="geoDao"><ref local="dao2"/></property>
</bean>
</property>
</bean>
public class BusinessObject{
Dao1;
Dao2;
/**
* Po celou metodu update mam session otevrenou
*/
public void update(){
X x = dao1.findSomething();
x.getSomeLazyCollection();
.
.
.
}
}
Rastislav Siekel napsal(a):
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
______________________________________________________________________
--
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
______________________________________________________________________