是的用了,测试2
getHibernateTemplate().saveOrUpdate(manager); 1
managerIdc.setMAccount("iiiiiiiiuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"); 2
getHibernateTemplate().saveOrUpdate(managerIdc); 3
出现回滚,第一行没有插入数据库

解决方案 »

  1.   

    照你说的情况我的分析是这样的:
    测试方式1:
    代码和数据都没错,调用你dao的方法并没有出错,而是你这个方法调用结束后,程序其他地方报错了。所以事务是有效的。
    例子代码:
    void fun(){
    Object obj = new Object();
    dao.saveOrUpdate(obj);      //事务只对这里有作用
    throw Exception("测试");    //这里报错
    }测试方法2:
    要保存的对象数据类型不对了,所以调用dao的方法时出错,事务回滚了。
    例子代码:
    void fun(){
    Object obj = new Object();
    obj.setAttribute("xxx");
    dao.saveOrUpdate(obj);      //事务只对这里有作用,这里报错,所以事务回滚
    }至少我是觉得可能导致你错误的原因在这里。
      

  2.   

    更正我上面说的。没看清你的代码。
    这样的错误的原因很可能是因为你配置事务的xml文件不正确。象上面说的,要看你配置文件也许才能知道。
      

  3.   

    问题已经找到,但是还要感谢朋友们的帮助。  问题的根本原因是Exception,我的catch抛出的用的是Exception
    第一种情况抛出除零的错误,没有捕获到数据库异常所以没有回滚
      用DataAccessException测试1、测试2都能正常回滚。