【问题标题】:Spring 3.0: SQL not committed when exception is thrownSpring 3.0:抛出异常时未提交 SQL
【发布时间】:2011-07-12 14:54:22
【问题描述】:

我正在开发一个 Java - Spring 3.0 - Hibernate Annotations 应用程序。

在我切换到另一个 MySQL 数据库服务器之前一切正常。

在第一个中,当抛出异常时,SQL 被提交并保存到数据库中。 (这就是我想要的)。

在第二台 MySQL 服务器(新的)中,当抛出异常时,所有数据库更新都将丢失。

我做错了什么?异常提交不是应用程序功能(而不是数据库功能)吗? MySQL 服务器如何“知道”在所有这些 SQL 之后是否引发了异常?

【问题讨论】:

  • 在第一个mysql服务器中,是否启用了自动提交?

标签: java mysql hibernate spring transactions


【解决方案1】:

我不了解每个 mysql 存储引擎。但是,不能在所有引擎中执行提交和回滚。 InnoDB 存储引擎支持这些操作。

【讨论】:

  • 查看我的答案了解全文
【解决方案2】:

您的应用程序代码似乎在不知不觉中依赖于与之通信的数据库服务器的默认自动提交行为。异常的事务行为是一个复杂的话题,它的工作可能是偶然的,而不是设计的。

认为这是暴露错误并修复它的理想机会,因为现在您拥有可重现的测试用例。

【讨论】:

    【解决方案3】:

    有点尴尬,但问题是在我的第一台服务器中,myisam 的所有表(即非事务性),这就是“事务”没有回滚的原因(即根本不可能回滚任何事务)。

    一旦我移动到新服务器,我发现了这个错误,并在我的上下文文件中正确配置了 no-rollback-for 属性,现在一切正常。

    我称之为奇迹编程

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2014-08-03
      • 2016-09-10
      • 2020-01-10
      • 1970-01-01
      • 2016-03-26
      相关资源
      最近更新 更多