我有产生线程#2的主线程,它在主线程中使用相同的休眠会话。线程 #2 每隔几分钟就会执行一次“select 1”以保持数据库连接处于活动状态,因为主线程的进程运行时间很长。一旦主线程完成了处理,它就会调用一个提交,但我得到了错误:
Caused by: org.hibernate.TransactionException: JDBC commit failed
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:161)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655)
... 5 more
Caused by: java.sql.SQLException: Can't call commit when autocommit=true
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)
at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1602)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146)
... 6 more
在主线程中,它创建成功提交的内部事务,它只是在提交时抛出此错误的外部事务。我看不出有什么可以改变自动提交布尔值。在我引入第二个线程以保持连接处于活动状态之前,从未发生过此错误。