Spring 3.0:抛出异常时未提交SQL

时间:2011-03-10 10:35:33

标签: java mysql hibernate spring transactions

我正在开发一个Java - Spring 3.0 - Hibernate Annotations app。

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

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

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

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

3 个答案:

答案 0 :(得分:3)

我不知道每个mysql存储引擎。但是,提交和回滚都无法在所有引擎中执行。 InnoDB存储引擎支持这些操作。

答案 1 :(得分:1)

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

考虑这是揭示错误并修复错误的理想机会,因为现在您拥有可重现的测试用例。

答案 2 :(得分:0)

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

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

我称之为奇迹编程