hibernate事务导致mysql innodb中的提交和后续回滚

时间:2011-12-15 18:56:59

标签: mysql hibernate

我正在使用Hibernate 3.3.2和mysql 5.0.77(innodb引擎)。 每当我执行任何sql操作选择,更新等它会导致在mysql结束时回滚。(通过queryin com_rollback列,我看到它每次都递增)。我在一个hibernate事务中执行这些操作。 Hibernate不会抛出任何异常并正常完成而没有任何错误。当我在mysql结束时启用了常规日志文件时,我看到每个事务都发生了以下步骤: set autocommit = 0 执行查询(选择,插入,更新) 承诺 回滚 自动提交= 1

我不明白为什么在提交后在mysql结束时发生了回滚。应用程序日志和mysql日志没有错误。 :(

1 个答案:

答案 0 :(得分:0)

检查你的休眠刷新模式或类似的东西。看看我在这里写的: migrating from HibernateTransactionManager to JpaTransactionManager

请注意我谈到了spring @Transactionnal(只读= true) 它不仅将刷新模式设置为never。 http://www.codeinstructions.com/2009/04/read-only-transactions-with-spring-and.html

  

如果事务被标记为只读,Spring会将Hibernate Session的刷新模式设置为FLUSH_NEVER,并将设置JDBC   事务为只读。

我不知道你是否正在使用弹簧,但也许它是。 如果你在never flushmode中有一个hibernate会话,你可能会遇到这个问题。


如果不是问题,您可以尝试在jdbc驱动程序中设置断点:

Connection.setReadOnly(boolean)