1

我在 jetty-maven 插件中运行 Java Spring 应用程序。当我调用 myBatis 插入语句时,该语句会自动提交。但是,当我调用更新时,该语句未提交。根据 myBatis 文档(http://www.mybatis.org/spring/transactions.html):

您不能通过 Spring 托管的 SqlSession 调用 SqlSession.commit()、SqlSession.rollback() 或 SqlSession.close()。

如何将我的应用程序配置为在 myBatis 更新语句上自动提交?

我启用了日志记录。以下是更新日志中的状态:

persistence.MyMapper.updateMyItem] - ooo 使用连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@af7eaf] 2012-12-12 17:20:31,684 调试 [com.persistence.MyMapper.updateMyItem] - ==> 准备:更新我的表设置日期=?哪里id=?2012-12-12 17:20:31,700 调试 [com.persistence.MyMapper.updateMyItem] - ==> 参数:2012-11-26 00:00:00.0(时间戳),0(整数)2012-12-12 17 :20:31,700 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19e86f9] 2012-12-12 17:20:31,700 调试 [org.springframework. jdbc.datasource.DataSourceUtils] - 返回到 DataSource 的 JDBC 连接 updateMyItem] - ==> 准备:更新 myTable 设置日期=?哪里id=?2012-12-12 17:20:31,700 调试 [com.persistence.MyMapper.updateMyItem] - ==> 参数:2012-11-26 00:00:00.0(时间戳),0(整数)2012-12-12 17 :20:31,700 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19e86f9] 2012-12-12 17:20:31,700 调试 [org.springframework. jdbc.datasource.DataSourceUtils] - 返回到 DataSource 的 JDBC 连接 updateMyItem] - ==> 准备:更新 myTable 设置日期=?哪里id=?2012-12-12 17:20:31,700 调试 [com.persistence.MyMapper.updateMyItem] - ==> 参数:2012-11-26 00:00:00.0(时间戳),0(整数)2012-12-12 17 :20:31,700 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19e86f9] 2012-12-12 17:20:31,700 调试 [org.springframework. jdbc.datasource.DataSourceUtils] - 返回到 DataSource 的 JDBC 连接

插入时,日志为:

2012-12-12 16:35:53,932 调试 [org.mybatis.spring.SqlSessionUtils] - 创建一个新的 SqlSession 2012-12-12 16:35:53,932 调试 [org.mybatis.spring.SqlSessionUtils] - SqlSession [org. apache.ibatis.session.defaults.DefaultSqlSession@22da8f] 未注册同步,因为同步未激活 2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 从数据源获取 JDBC 连接2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DriverManagerDataSource] - 创建新的 JDBC DriverManager 连接到 [jdbc:jtds:sqlserver://test/test] 2012-12-12 16:35 :53,932 DEBUG [org.mybatis.spring.transaction.SpringManagedTransaction] - JDBC 连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@3af3cb] 将不会由 Spring 2012-12-12 16:35:53,932 DEBUG [com. .persistence.MyMapper.insertMyItem] - ooo 使用连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@3af3cb] 2012-12-12 16:35:53,932 调试 [com.persistence.MyMapper.insertMyItem] - ==> 准备:插入进入 myTable (id,date) 值 (?, ?) 2012-12-12 16:35:53,932 DEBUG [com.persistence.MyMapper.insertMyItem] - ==> 参数:5(Integer), 2012-11-26 00 :00:00.0(时间戳)2012-12-12 16:35:53,932 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22da8f] 2012-12 -12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 将 JDBC 连接返回到数据源insertMyItem] - ==> 准备:插入 myTable (id,date) 值 (?, ?) 2012-12-12 16:35:53,932 DEBUG [com.persistence.MyMapper.insertMyItem] - ==> 参数:5(整数),2012-11-26 00:00:00.0(时间戳)2012-12-12 16:35:53,932 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session。 defaults.DefaultSqlSession@22da8f] 2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 将 JDBC 连接返回到 DataSourceinsertMyItem] - ==> 准备:插入 myTable (id,date) 值 (?, ?) 2012-12-12 16:35:53,932 DEBUG [com.persistence.MyMapper.insertMyItem] - ==> 参数:5(整数),2012-11-26 00:00:00.0(时间戳)2012-12-12 16:35:53,932 调试 [org.mybatis.spring.SqlSessionUtils] - 关闭非事务性 SqlSession [org.apache.ibatis.session。 defaults.DefaultSqlSession@22da8f] 2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 将 JDBC 连接返回到 DataSourcedefaults.DefaultSqlSession@22da8f] 2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 将 JDBC 连接返回到 DataSourcedefaults.DefaultSqlSession@22da8f] 2012-12-12 16:35:53,932 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 将 JDBC 连接返回到 DataSource

插入和更新日志语句似乎指示相同的基本步骤。

4

1 回答 1

2

经过一番研究,我发现这是一个客户问题。它总是在更新语句中为 id 传递一个 0。记录的ids > 0。一路上,我配置了spring txn管理。就在那时,我观察到了同样的行为,并意识到它一定不是服务器端配置问题。很抱歉在发布之前没有抓住它。

于 2012-12-13T00:37:54.027 回答