opensessioninview和commit transaction

时间:2011-01-24 18:16:45

标签: java oracle hibernate spring transactions

我正在使用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

1 个答案:

答案 0 :(得分:2)

使用@Transactional(并且您有一个名为transactionManager的bean,并且拥有<tx:annotation-driven />)时,您无需手动处理事务。