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