1. 操作系统版本及内核发行版本:
CentOS 7.6–3.10.0-693.el7.x86_64
2. 数据库版本及架构:
数据库架构 单机, 数据库版本为 Release 5.0 22.1.0 revision(28cd72e)
3. 问题描述:
Hibernate 设置session.setFlushMode(FlushMode.MANUAL); 无法手动提交事务
4. 错误代码:
java.sql.SQLException: Cannot execute the query in auto-commit mode
5. 原因:
session.setFlushMode 这个是hibertnate的参数,功能为设置session缓存落盘机制和事务的提交模式没有关系。
所以以下代码执行sql不能提交和session.setFlushMode(FlushMode.MANUAL) 设置没有关系。
SessionImpl session = (SessionImpl)sessionFactory.openSession();
session.setFlushMode(FlushMode.MANUAL);
connection = session.connection();
pstmt = connection.prepareStatement(sql.toString());
6. 解决方案:
1)事务是否能手动提交受 druid 的 default-auto-commit 参数影响如果设置为 true 则隐式事务自动提交不能进行手动提交,
但无论该参数设置为什么值显示的事务都不受影响。如需要手动提交隐式事务则该参数设置为false 即可。