我正在使用Hibernate,Spring和JSF。
为了防止LazyInitializationException,我正在使用
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="singleSession" value="true"/>
</bean>
在myDAO中,我定义了方法:
public Collection<T> findAll() {
Session session = getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
return
session.createCriteria( persistentClass
).setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY
).list();
}
我打电话给这样的方法:
@Transactional( readOnly = false, propagation = Propagation.SUPPORTS )
public Collection<MyData> getMyData() {
return (Collection<MyData>) myDAO.findAll();
}
在这种情况下,我使用了Spring事务。我是否需要在findAll方法的Transaction tx = session.beginTransaction(); and tx.commit()?
中启动交易?
我正在使用Oracle 10g
答案 0 :(得分:2)
使用@Transactional
(并且您有一个名为transactionManager
的bean,并且拥有<tx:annotation-driven />
)时,您无需手动处理事务。