我对spring 事务回滚 有问题我在 spring 配置文件中 有如下配置        <aop:config proxy-target-class="true">
<aop:pointcut id="serviceMethods"
expression="execution(* services..*Service.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config> <tx:advice id="txAdvice" transaction-manager="testTxManager">
<tx:attributes>
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
在services 下我有个 testService 接口 其中 包含了一个 updateTest方法。
并在 testAction 中调用如下       public String execute() throws Exception {
// TODO Auto-generated method stub

testService.updateTest();
return Action.SUCCESS;
}
updateTest中 调用了 testDao 方法 具体实现如下        Lesson ls = new Lesson();
ls.setLessonStudents(null);
ls.setName("Asp.Net");
ls.setNum("0009");
ls.setTeacher("WangHongZhi");
ls.setTime(4);
getHibernateTemplate().save(ls);
getHibernateTemplate().save(ls);//主键重复,测试事务是否回滚
getHibernateTemplate().save(ls);//主键重复,测试事务是否回滚
理论上来讲 ,当我调用updateTest 的时候肯定会报一个 主键重复的错误,并且 回滚 第一条插入成功的数据。
但奇怪的是 , 第一次程序 运行 正常。 第二次 才报出主键重复 错误。
(删掉以插入的数据)
当我去掉 spring 事务管理 配置的代码 。 结果 是,程序 第一次运行就报错了。很明显 ,spring 事务管理 的配置是成功了。 但是 ,他为什么在第一次运行的时候不会报错呢?
请大家指教!

解决方案 »

  1.   

    getHibernateTemplate().save(ls);
        getHibernateTemplate().save(ls);//主键重复,测试事务是否回滚
        getHibernateTemplate().save(ls);//主键重复,测试事务是否回滚这三个保存的时候都没有遇到提交,当然不会报错
    建议测试:运行第一次之后,删除数据库的数据,再运行第二次,如果报错的话,才能证明程序有问题
    如果不报错,那说明是提交与否的问题