to 楼上
这个事务处理可以container mainten的阿,为什么都要手写呢?

解决方案 »

  1.   

    我跟踪了代码的,抛出异常后Spring的事务处理开始活动了。它调用了:org.springframework.jdbc.datasource.DataSourceTransactionManager的回滚方法,并且我也查到了使用的connection,connection的AutoCommit确实是false哦。 protected void doRollback(DefaultTransactionStatus status) {
    DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction();
    Connection con = txObject.getConnectionHolder().getConnection();
    if (status.isDebug()) {
    logger.debug("Rolling back JDBC transaction on Connection [" + con + "]");
    }
    try {
    con.rollback();
    }
    catch (SQLException ex) {
    throw new TransactionSystemException("Could not roll back JDBC transaction", ex);
    }
    }上面的 doRollback() 确实是调用了的。
    并且也调用了: con.rollback() 的。
      

  2.   

    doRollback() 是 DataSourceTransactionManager的一个方法。
      

  3.   

    http://www.javaeye.com/viewtopic.php?t=11190&highlight=%CA%C2%CE%F1
    这个应该对你有用
      

  4.   

    你mysql的版本呢,有可能是你的mysql不支持回滚
      

  5.   

    <property name="target" ref="accountservice_target" />accountservice_target换成具体的bean试一下
      

  6.   

    刚才我使用了hibernate也不行。郁闷中。
    我mysql的版本是:4.1.11 for windows的。
    枫红一刀:你的意思我没懂哈。具体bean是什么?
      

  7.   

    Spring的事务有2种方式:
    1。编程的方式,使用TransactionTemplate
    2。AOP方式,基本就是我的这种配置方式
      

  8.   

    你还是应该去测试一下,看看你的table是否支持事务,mysql的事务是比较奇怪的,
    如果你的表是非事务表,rollback是不起作用的。具体去查查mysql的手册。
      

  9.   

    谢谢 sgdb(神天月晓) :确实是MySQL设置的问题,我换用oracle就正确了。我等下去看下如何设置mysql的事务。我一直怀疑自己的代码,没有怀疑数据库自身,确实有点愚昧。
      

  10.   

    呵呵,来晚了一步。sgdb(神天月晓) ( ) 的说法是对的,记得以前说mysql好象是不支持事务处理的,不过新版本(好象是3.x,具体是哪个之后就记不清了)是支持的,但是需要改下设置,然后重新编译才可以使用,默认安装的是不支持事务的。oracle当然支持,地球人都知道。
      

  11.   

    呵呵,刚刚用google查了一下“mysql 事务处理”,你看一下,对你会有帮助的。
      

  12.   

    spring的事务管理是基于method级,举个例子
     一个业务bean里面有两个方法method1,method2
        method1里面有insert1,udpate1两个操作
        method2里面有insert2,update2两个操作
      如果在method2里面的update2发生异常的话,method1里面的操作是不会回滚的。
      只会回滚method2里面的两个操作,就是insert2,update2两个操作回滚
      

  13.   

    非常感谢大家。
    very  thanks
      

  14.   

    我回到了my sql 下。我把mysql的table类型从MyISAM改为InnoDB就可以了。但还没有试验过其它类型。