开始怀疑Spring框架的jdbc事务处理方式 to 楼上这个事务处理可以container mainten的阿,为什么都要手写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我跟踪了代码的,抛出异常后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() 的。 doRollback() 是 DataSourceTransactionManager的一个方法。 http://www.javaeye.com/viewtopic.php?t=11190&highlight=%CA%C2%CE%F1这个应该对你有用 你mysql的版本呢,有可能是你的mysql不支持回滚 <property name="target" ref="accountservice_target" />accountservice_target换成具体的bean试一下 刚才我使用了hibernate也不行。郁闷中。我mysql的版本是:4.1.11 for windows的。枫红一刀:你的意思我没懂哈。具体bean是什么? Spring的事务有2种方式:1。编程的方式,使用TransactionTemplate2。AOP方式,基本就是我的这种配置方式 你还是应该去测试一下,看看你的table是否支持事务,mysql的事务是比较奇怪的,如果你的表是非事务表,rollback是不起作用的。具体去查查mysql的手册。 谢谢 sgdb(神天月晓) :确实是MySQL设置的问题,我换用oracle就正确了。我等下去看下如何设置mysql的事务。我一直怀疑自己的代码,没有怀疑数据库自身,确实有点愚昧。 呵呵,来晚了一步。sgdb(神天月晓) ( ) 的说法是对的,记得以前说mysql好象是不支持事务处理的,不过新版本(好象是3.x,具体是哪个之后就记不清了)是支持的,但是需要改下设置,然后重新编译才可以使用,默认安装的是不支持事务的。oracle当然支持,地球人都知道。 呵呵,刚刚用google查了一下“mysql 事务处理”,你看一下,对你会有帮助的。 spring的事务管理是基于method级,举个例子 一个业务bean里面有两个方法method1,method2 method1里面有insert1,udpate1两个操作 method2里面有insert2,update2两个操作 如果在method2里面的update2发生异常的话,method1里面的操作是不会回滚的。 只会回滚method2里面的两个操作,就是insert2,update2两个操作回滚 非常感谢大家。very thanks 我回到了my sql 下。我把mysql的table类型从MyISAM改为InnoDB就可以了。但还没有试验过其它类型。 hibernate 插入一条数据到 oracle中的问题 list remove 上传文件的大小 是 由那些因素决定的? struts2.1.8页面property标签输出的都是unicode(的,)编码 在线等 求帮助,OC4J 启动服务报错 jbpm4.4发布后,无流程记录?? 拖拖拽拽画报表? 解决中文编码问题,哪种方式是正确的,如下:? ant 编译出错, 如何把String变量转化为method? 肯定给分!!!请问怎么在jbuilder9中创建消息资源文件 hibernate入门级问题
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() 的。
这个应该对你有用
我mysql的版本是:4.1.11 for windows的。
枫红一刀:你的意思我没懂哈。具体bean是什么?
1。编程的方式,使用TransactionTemplate
2。AOP方式,基本就是我的这种配置方式
如果你的表是非事务表,rollback是不起作用的。具体去查查mysql的手册。
一个业务bean里面有两个方法method1,method2
method1里面有insert1,udpate1两个操作
method2里面有insert2,update2两个操作
如果在method2里面的update2发生异常的话,method1里面的操作是不会回滚的。
只会回滚method2里面的两个操作,就是insert2,update2两个操作回滚
very thanks