multithreading - JDBC提交失败,在autocommit = true时调用提交。多线程 hibernate session 以某种方式更改了自动提交?

标签 multithreading hibernate spring session autocommit

我有产生#2线程的主线程,该线程在主线程中使用相同的 hibernate session 。线程#2每隔几分钟就会执行一次“选择1”,以使数据库连接保持事件状态,因为主线程运行的进程很长。一旦主线程完成了处理,就调用了commit,但是我得到了错误:

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

在主线程中,它创建成功提交的内部事务,而在提交时抛出该错误的只是外部事务。我看不出有什么可以改变自动提交 bool 值。在介绍第二个线程以保持连接事件之前,从未发生此错误。

最佳答案

即使我认为您应该认真地重新考虑使用Hibernate的方式,也可以通过在URL的JDBC驱动程序中添加relaxAutoCommit参数来绕过此问题。

MySQL文档中的详细信息:

relaxAutoCommit

If the version of MySQL the driver connects to does not support transactions, still allow calls to commit(), rollback() and setAutoCommit() (true/false, defaults to 'false')?

Default: false

Since version: 2.0.13

资料来源:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

关于multithreading - JDBC提交失败,在autocommit = true时调用提交。多线程 hibernate session 以某种方式更改了自动提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262327/

相关文章:

java - css 和 js 不适用于我的页面?

java - 在监听器类中配置的套接字服务器阻止了 tomcat 的运行

java - Java中的多线程文件读取

ios - xcode 崩溃并显示 "Thread 1: signal SIGABRT"并且连接未链接

c++ - 当应用程序应该退出时,生产者和消费者无限期地等待

java - 将 SQL native 查询转换为 Spring 数据 JPA

java - 有没有办法自动更新jpa中的实体类?

java - Spring DATA JPA 以 Hibernate 作为 JPA 提供者

c - thrd_busy 和 mtx_lock()/mtx_timedlock()

java - authentication.getName() 在自定义 AuthenticationProvider 中返回 null