【问题标题】:How do I get myBatis update statement to commit in a Java Spring application?如何让 myBatis 更新语句在 Java Spring 应用程序中提交?
【发布时间】:2012-11-30 10:44:51
【问题描述】:

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

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

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

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

2012-12-12 17:20:31,669 调试 [org.mybatis.spring.SqlSessionUtils] - 创建一个新的 SqlSession 2012-12-12 17:20:31,669 调试 [org.mybatis.spring.SqlSessionUtils] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19e86f9] 未注册同步,因为同步未激活 2012-12-12 17:20:31,669 调试 [org.springframework.jdbc.datasource.DataSourceUtils] - 从数据源获取 JDBC 连接 2012-12-12 17:20:31,669 调试 [org.springframework.jdbc.datasource.DriverManagerDataSource] - 创建新的 JDBC DriverManager 连接到 [jdbc:jtds:sqlserver://test/test] 2012-12-12 17:20:31,684 调试 [org.mybatis.spring.transaction.SpringManagedTransaction] - JDBC 连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@af7eaf] 不会由 Spring 管理 2012-12-12 17:20:31,684 调试 [com.persistence.MyMapper.updateMyItem] - ooo 使用连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@af7eaf] 2012-12-12 17:20:31,684 调试 [com.persistence.MyMapper.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] - 将 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 调试 [org.mybatis.spring.transaction.SpringManagedTransaction] - JDBC 连接 [net.sourceforge.jtds.jdbc.ConnectionJDBC3@3af3cb] 不会由 Spring 管理 2012-12-12 16:35:53,932 调试 [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 调试 [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 连接返回到数据源

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

【问题讨论】:

    标签: java spring commit mybatis maven-jetty-plugin


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多