2011-01-24 83 views
1

我正在使用Hibernate,Spring和JSF。opensessioninview和commit transaction

爲了防止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

回答

2

當使用@Transactional(你有一顆豆叫transactionManager,並有<tx:annotation-driven />),那麼你並不需要手動處理事務。

相關問題