暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hibernate 适配SUNDB无法手动提交事务

原创 科蓝SUNDB编辑部 2022-12-08
885

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 即可。
2)如未使用druid连接池则事务提交受 Hibernate参数autocommit影响,在Hibernate基本配置中添加如下设置开启自动提交:
flase
3)总结:建议关闭连接池及hibernate等框架的自动提交功能,采用手动提交能更好的保证事务的完整性也更加可控。

最后修改时间:2023-07-17 14:54:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论