2011-12-15 77 views
2

我使用Hibernate 3.3.2和mysql 5.0.77(innodb引擎)。每当我执行任何sql操作select,update等时,它会导致在mysql结束时回滚(通过queryin com_rollback列,我看到它每次递增)。我在一个hibernate事务中执行这些操作。当我在mysql端启用通用日志文件时,我看到每个事务都发生以下步骤: set autocommit = 0 执行查询(选择,插入,更新) 提交 回滚 autocommit = 1hibernate事务导致在mysql提交和随后回滚innodb

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

回答

0

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

请注意,我谈到了春天@Transactionnal(只读=真) 它不仅集冲洗模式永远不会。 http://www.codeinstructions.com/2009/04/read-only-transactions-with-spring-and.html

如果交易被标记为只读,春节将设置Hibernate的Session的flush模式FLUSH_NEVER,并设置JDBC 交易为只读。

我不知道你是否在使用弹簧,但也许它是。 如果你在永不flushmode有一个休眠会话,你可能有这个问题。


如果不是这个问题,你可以尝试把一个断点在你的JDBC驱动的:我不使用Spring

Connection.setReadOnly(boolean) 
+0

。我将flush模式设置为flush_never,但仍然是.session.setFlushMode(FlushMode.NEVER); \t \t \t trx = session.beginTransaction(); 。 \t \t \t retObj =(T)session.createCriteria(clazz所)。新增( \t \t \t \t \t Expression.eq(属性,过滤器))uniqueResult(); \t \t}赶上(HibernateException的前){ \t \t \t LOG.finer( “休眠异常:{0}”,购); \t \t \t //trx.rollback(); \t \t \t抛出新的CpFaultException(clazz.getName(),ex); (例外e){ \t \t \t LOG.finer(“检索时发生异常:{0}”,e); \t \t \t //trx.rollback(); \t \t} finally { \t \t \t HibernateSessionFactory。closeSession(); \t \t} – user1100537 2011-12-16 06:53:32