最近做的项目有一个很麻烦的业务,一个操作里包含了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的顺序问题相关推荐

  1. hibernate 执行sql在哪个类_一篇文章让你马上入门Hibernate

    欢迎关注头条号:Java小野猫 那什么是Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全 ...

  2. hibernate执行sql语句 查询 删除

    //执行删除sql语句 @Overridepublic void deleteById(String id) {// TODO Auto-generated method stubint a=this ...

  3. bs架构与cs架构的区别_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明...

    概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...

  4. oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...

    概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...

  5. 步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序

    转载自 https://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料 ...

  6. hibernate oracle驱动,出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误...

    出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误: org.hibernate.MappingException: No D ...

  7. 步步深入MySQL:架构-查询执行流程-SQL解析顺序

    一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...

  8. mysql数据库总览_MySQL架构总览-查询执行流程-SQL解析顺序

    从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engine Layer'.其它各个模块和组件 ...

  9. 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!

    一.前言 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 二.MySQL架构总览 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原 ...

最新文章

  1. springboot-springmvc-requestParam
  2. _网站建站基础第十一课(域名解析服务器环境linux安装宝塔)
  3. Struts2 关于返回type=chain的用法.
  4. java udp 接收不定长_JAVA UDP通信为什么只能接收一次数据,我想要时刻接收数据,并更新UI,大神们帮我看看程序吧?...
  5. 汇编语言(三十)之多模块求和
  6. 多mysql实例下开发需要注意主从同步延迟
  7. 特斯拉回应提车考试:仅作为丰富交付体验的“选修”活动
  8. i2c通信的详细讲解_STM32Cube15 | 使用硬件I2C读写温湿度传感器(SHT30)
  9. 【数据结构】3、模拟银行窗口排队叫号系统——C++
  10. ClearCase汇编
  11. 黑马python5_黑马Python5.0+人工智能课程升级5.0版本!【完整无秘】
  12. 瞻博网络Contrail多云解决方案荣获最佳创新解决方案奖
  13. Android支付宝刷步数,支付宝刷步数教程(手机免ROOT)
  14. linux系统发送短信,Linux系统的短信收发怎么实现?
  15. 猜字游戏计算机,《C猜字游戏.doc
  16. google语音搜索识别API【转载】
  17. C#实现图片从数据库的上传和下载
  18. 机器学习网络安全公司Sift Science获3000万美元C轮融资
  19. BigDecimal 正数转换成负数
  20. JAVA计算机毕业设计在线党建学习平台Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. ubuntu12.04 安装中文输入法
  2. PHP - PDO 之 mysql 基础操作
  3. TimeQuest学习总结
  4. 转 安装php时报gd相关的错误(gd_ctx.c)
  5. DropdownList 赋初始值问题
  6. Table 自动换行问题
  7. 自定义react-navigation的TabBar
  8. 物联网是“互联网+”的动力 智慧是核心
  9. Solr增删改查索引
  10. lucene索引的删除和更新