Spring的声明式事务配置很是繁琐,所以貌似看了很多Spring项目都是使用注解式事务,使用Spring注解式很是方便。只需要进行如下配置:
在applicationContext中配置事务管理器
无论是声明式事务还是注解式事务,都是需要配置事务管理器的。
<!-- 事务管理器 -->
<!-- BEGIN -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- END -->
在applicationContext启用注解事务
<!-- 启用注解事务 -->
<!-- BEGIN -->
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>
<!-- END -->
在需要事务的类中使用注解
@Transactional(propagation=Propagation.REQUIRED , rollbackFor = java.lang.Exception.class)
public class TestDaoImpl extends HibernateDaoSupport {
public void save(Test1 test)
{
Session session = this.getSessionFactory().getCurrentSession();
session.save(test);
}
}
需要注意的一些问题
抛出no active transaction异常
如果你使用的是Hibernate3整合的话,这个原因一般是因为配置文件中加了一下的一行配置 <!--<prop key="hibernate.current_session_context_class">
thread
</prop> -->
把这行配置去掉。
抛出NoClassDefExeption
这个原因是因为缺少Jar文件,Spring中需要asm-3.3.jar的支持,如果使用Myecplise IDE是没有把这个Jar包加入进去的。