spring+mybatis,事务不起作用,求帮忙

问题描述

spring+mybatis,事务不起作用,求帮忙

spring + mybatis,开始annotation式事务
配置如下:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

在Service层使用@Transactional,Service没有用接口
@Transactional
public void registerAccount(Account account, String email, Long classId) {
try {
addAccount(account);
AccountDetail accountDetail = new AccountDetail(accountId);
accountDetail.setEmail(email.trim());
addAccountDetail(accountDetail);
addAccountToClass(accountId, classId);
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
}
}

三个add*方法都是private方法,没有try catch块。当addAccountToClass方法抛错时,会在当前这个try catch块中被捕获,并抛出RuntimeException。但是,前面的两个add方法却没有回滚,谁知道是怎么回事?

log日志如下:
[DEBUG] 2013-09-03 08:51:48 :ooo Using Connection [jdbc:mysql://localhost:3306/test, UserName=root@localhost , MySQL-AB JDBC Driver]
[DEBUG] 2013-09-03 08:51:48 :==> Preparing: select * from account where name = ?;
[DEBUG] 2013-09-03 08:51:48 :==> Parameters: uuux(String)
[DEBUG] 2013-09-03 08:51:48 :ooo Using Connection [jdbc:mysql://localhost:3306/test, UserName=root@localhost , MySQL-AB JDBC Driver]
[DEBUG] 2013-09-03 08:51:48 :==> Preparing: insert into tbl_account (password, name, gender) values (?, ?, ?);
[DEBUG] 2013-09-03 08:51:48 :==> Parameters: 81dc9bdb52d04dc20036dbd8313ed055(String), uuux(String), 0(Integer)
[INFO ] 2013-09-03 08:51:48 :创建新用户uuux
[DEBUG] 2013-09-03 08:51:48 :ooo Using Connection [jdbc:mysql://localhost:3306/test, UserName=root@localhost , MySQL-AB JDBC Driver]
[DEBUG] 2013-09-03 08:51:48 :==> Preparing: insert into tbl_account_detail (account_id, email, age) values (?, ?, ?);
[DEBUG] 2013-09-03 08:51:48 :==> Parameters: 20(Long), ds@s.s(String), null
[INFO ] 2013-09-03 08:51:48 :创建新用户详情
[DEBUG] 2013-09-03 08:51:48 :ooo Using Connection [jdbc:mysql://localhost:3306/test, UserName=root@localhost , MySQL-AB JDBC Driver]
[DEBUG] 2013-09-03 08:51:48 :==> Preparing: insert into tbl_account_class_ref (account_id, class_id) values (accountId, ?);
[DEBUG] 2013-09-03 08:51:48 :==> Parameters: 1(Long)
[INFO ] 2013-09-03 08:51:48 :Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
[INFO ] 2013-09-03 08:51:48 :SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
[ERROR] 2013-09-03 08:51:48 :

Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'accountId' in 'field list'

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: insert into tbl_account_class_ref (account_id, class_id) values (accountId, ?);

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'accountId' in 'field list'

这里我觉得比较奇怪的一点事:日志中打印了多个ooo Using Connection [jdbc:mysql://localhost:3306/test,... 是不是意味着每个操作都用了一个单独的连接?

解决方案

可以把每个connection对象都打印一下看看,就知道是不是单独的了。

时间: 2024-11-02 10:52:16

spring+mybatis,事务不起作用,求帮忙的相关文章

spring+mybatis事务不生效,求解

问题描述 spring+mybatis事务不生效,求解 首先是applicationContext.xml文件 <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.Dat

捕获-springMVC+spring+mybatis事务问题

问题描述 springMVC+spring+mybatis事务问题 有什么办法能正常处理捕获异常并进行回滚,并且将具体的错误信息return. 而一旦出现异常后,就不会执行return了! 请问有什么办法吗? 解决方案 参考:http://bbs.csdn.net/topics/390785374

spring mybatis 事务范围

问题描述 spring mybatis 事务范围 5C 平常spring+mybatis配置中 ,只配置了 class=""org.springframework.jdbc.datasource.DataSourceTransactionManager""> ,没有编码实现和声明实现, 那么一个请求中多个多数据库的操作, 在这个请求中有事务吗,如果有事务范围是这个请求 ,还是每个dao操作都是一个事务? 另 数据库 配置 | Variable_name | V

spring mybatis 事务隔离级别

问题描述 spring mybatis 事务隔离级别 我数据库的主键是单独存放在一张公共表里面的,里面的数据如下: 表名|当前值 table1|20 然后通过一个存储过程来每次获取递增. 我配置的是service级别的事务.我在一个service里面把要插入的数据封装到List里面,多次调用自增长主键存储过程,发发现每次获取的都是相同的值.按理说我每次调用数据库里面的值就会从20变成21,依次类推.是不是默认的事务隔离级别是不提交我的事务.等全部执行成功之后才提交事务? 我应该配置成什么隔离级别

spring 注解事务不起作用(太奇怪了)

问题描述 CopyOfUserServiceImp.javapackage com.zjhc;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import javax.sql.DataSource;import org.springframework.transaction.annotation.Transactional;public class CopyOfUserServic

spring mybatis 的注解事务

首先要在 spring-mybatis的配置文件添加 事务支持,和事务annotation支持 注意:如果是mysql请使用innodb innodb 支持事务功能,myisam 不支持. <!-- transaction support--> <!-- PlatformTransactionMnager --> <bean id="txManager" class="org.springframework.jdbc.datasource.Dat

mybatis spring 整合 junit测试。 事务不起作用,不提交。删除无效???

问题描述 mybatis spring 整合 junit测试. 事务不起作用,不提交.删除无效??? applicationContext.xml 中的数据库和 sessionFactory以及事务配置 Xml代码 <bean id="bssDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connec

spring mvc 事务,操作多张表的时候,异常不回滚,求大神帮忙啊

问题描述 spring mvc 事务,操作多张表的时候,异常不回滚,求大神帮忙啊 @Override @Transactional(rollbackFor=Exception.class) public Boolean saveXkcq(String qian,String xh, Xk_cqb cqb, Rw_xkb rwXkb, Xk_xkb xkb) { Boolean type = false; try { if(qian!=null && qian.length()>0){

spring mvc+mybatis 事务控制不起作用

问题描述 用的是spring mvc和mybatis框架.数据库是mysql.然后发现事务配置了不起作用..业务逻辑是新增用户,用户新增成功之后再在其他表插入一条对应的用户角色关联信息.现在问题是假如用户插入成功之后..插入对应的用户角色关联信息出错后,用户那条新增记录不能自动删除.看了很多人说是因为@service提前扫描的问题.那个我改过了.还有说是表的引擎不是InnoDB.但是我们建的表是InnoDB.还有说要抛出RuntimeException.我也抛出了..但是还是没用.没办法.请大家