hibernate执行sql的顺序问题
最近做的项目有一个很麻烦的业务,一个操作里包含了insert,update,delete,select动作。
一开始起在一个hibernate事务里,发现在入库的时候有的时候数据对不上,后来查了下资料才知道hibernate事务提交sql语句的顺序并不是按照程序里写的顺序提交的。
总的说应该是按insert、update、delete的顺序。
具体的顺序查了下应该是:
涉及的SQL语句会按照下面的顺序发出执行:
所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序
所有对实体进行更新的语句
所有进行集合删除的语句
所有对集合元素进行删除,更新或者插入的语句
所有进行集合插入的语句
所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序
为什么会出现这种情况呢,原因是hibernate不会把sql语句直接提交给数据库,而是先放在hibernate的缓存中等事务commit的时候一起提交,这样就导致sql语句执行的顺序与程序不一致。
解决办法:
用session.flush();把sql语句刷入数据库。
比如想要执行delete语句的时候就在createQuery后面执行下session.flush();
而且在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。
我用的方法是在同一个session里打开两个transaction,分别处理可以分开写的业务。
不知这样是否会出现问题,先记录下,如果执行的时候出现问题再来更正。
也请看到的大虾们指点。
hibernate执行sql的顺序问题相关推荐
- hibernate 执行sql在哪个类_一篇文章让你马上入门Hibernate
欢迎关注头条号:Java小野猫 那什么是Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全 ...
- hibernate执行sql语句 查询 删除
//执行删除sql语句 @Overridepublic void deleteById(String id) {// TODO Auto-generated method stubint a=this ...
- bs架构与cs架构的区别_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明...
概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...
- oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...
概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...
- 步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序
转载自 https://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料 ...
- hibernate oracle驱动,出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误...
出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误: org.hibernate.MappingException: No D ...
- 步步深入MySQL:架构-查询执行流程-SQL解析顺序
一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...
- mysql数据库总览_MySQL架构总览-查询执行流程-SQL解析顺序
从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engine Layer'.其它各个模块和组件 ...
- 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!
一.前言 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 二.MySQL架构总览 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原 ...
最新文章
- springboot-springmvc-requestParam
- _网站建站基础第十一课(域名解析服务器环境linux安装宝塔)
- Struts2 关于返回type=chain的用法.
- java udp 接收不定长_JAVA UDP通信为什么只能接收一次数据,我想要时刻接收数据,并更新UI,大神们帮我看看程序吧?...
- 汇编语言(三十)之多模块求和
- 多mysql实例下开发需要注意主从同步延迟
- 特斯拉回应提车考试:仅作为丰富交付体验的“选修”活动
- i2c通信的详细讲解_STM32Cube15 | 使用硬件I2C读写温湿度传感器(SHT30)
- 【数据结构】3、模拟银行窗口排队叫号系统——C++
- ClearCase汇编
- 黑马python5_黑马Python5.0+人工智能课程升级5.0版本!【完整无秘】
- 瞻博网络Contrail多云解决方案荣获最佳创新解决方案奖
- Android支付宝刷步数,支付宝刷步数教程(手机免ROOT)
- linux系统发送短信,Linux系统的短信收发怎么实现?
- 猜字游戏计算机,《C猜字游戏.doc
- google语音搜索识别API【转载】
- C#实现图片从数据库的上传和下载
- 机器学习网络安全公司Sift Science获3000万美元C轮融资
- BigDecimal 正数转换成负数
- JAVA计算机毕业设计在线党建学习平台Mybatis+源码+数据库+lw文档+系统+调试部署