我正在使用 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 事务。我需要在Transaction tx = session.beginTransaction(); and tx.commit()?
开始交易吗?在 findAll 方法中?
我使用的是 Oracle 10g
最佳答案
当使用@Transactional
时(并且您有一个名为 transactionManager
的 bean,并且有 <tx:annotation-driven />
),那么您不需要手动处理事务。
关于java - 打开 session 查看并提交事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785522/