一、session flush方法主要做了两件事:

1、清理缓存;
2、执行sql。
二、session在什么情况下执行flush
1、 默认在事务提交时;
2、 显示的调用flush。
三、当主键生成方式不同时,flush调用的时刻也不同。
1、当主键的生成方式是uuid时:
调用完save()后,只是将save的对象纳入到了session的管理,不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false(也就是说,此时数据库中并不存在所save的对象);如果此时调用session.flush()方法,那么Hibernate会清除缓存,执行相关的sql语句,则此时数据已经在数据库中存在了,且如果数据库的隔离级别设置成“未提交读”时,我们应该可以在数据库中读到相关的数据记录(此时的数据仍然可以“回滚”),显然,session中existsInDatebase状态将更改为true;如果transaction.commit()方法被调用,在默认会调用session.flush()方法,同时,此时数据库中的数据不能“回滚”。
2、当主键的生成方式为native时:
调用完save()后,将save的对象纳入到了session的管理,发出insert语句,并返回有数据库生成的id,修改了session中existsInDatebase状态为true,如果数据库的隔离级别设置为为提交读,那么我们可以看到save过的数据,这种情况下,显示的调用session.flush()方法,已经显的多余了,因为在后面的transaction.commit()方法被调用时,会隐式的调用session.flush()方法。
3、当主键的生成方式为assigned时:
调用完save()后,将save的对象纳入到了session的管理,不会发出insert语句,而此时的主键已经由我们手动分配了,于是,显示的调用session.flush()方法,能起到主键生成方式为uuid时的效果。
四、我需要注意的是:hibernate默认是按照save(insert),update、delete顺序提交相关操作的,所以,如果我们想要按照自己的意愿去进行相关的操作,那么我们可以用显示的调用session.flush()来实现我们的愿望。

转载于:https://blog.51cto.com/beyond99/402554

Hibernate中sessoin的flush学习笔记相关推荐

  1. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  2. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  3. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  4. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  5. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核

    Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...

  6. textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签

    表单 1 : 表单标签 <form></form> 属性 : action = '接口地址' method = 'get / post' name = '表单名称' 2 : 表 ...

  7. python里数字怎么表示_Python 中的数字—Python 学习笔记

    今天讲一下 Python 中六种标准数据类型之一:数字. 整数 整数可以执行加减乘除运算,+代表加法, -代表剪法, *代表乘法./代表除法, %代表求余数: >>> 1+2 3 & ...

  8. python中continue用法_Python学习笔记之Break和Continue用法分析

    本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...

  9. oracle中overwrite写法,【学习笔记】Oracle 11G新特性restart的深入研究案例

    [学习笔记]Oracle 11G新特性restart的深入研究案例 时间:2016-11-26 22:35   来源:Oracle研究中心   作者:网络   点击: 次 天萃荷净 Oracle研究中 ...

最新文章

  1. c语言prime函数怎么用_n!函数用C语言其实可以这样!
  2. 浅谈Linux服务器究竟设置多大交换分区合适
  3. 把你的 VS Code 打造成 C++ 开发利器
  4. Linux下启动启动tomcat 服务器报错 The file is absent or does not have execute permission
  5. java xmpp openfire_java应用之openfire入门篇
  6. 理解Virtual方法。
  7. Python Flask高级编程
  8. 关于使用C#编写一个简单的日志类
  9. 2021信息安全工程师考试汇总--1220更新考试结果
  10. hp打印机驱动android,惠普打印机驱动
  11. 根据车辆型号自动生成车辆编号
  12. C语言实现EPSG:4326和EPSG:3857的互转
  13. SuperMap三维专题之3dsMax数据——对接篇
  14. C# WinForm 使用SMTP协议发送QQ邮箱验证码
  15. 09组团队项目-Alpha冲刺-2/6
  16. Mock技术_配置json文件
  17. IntelliJ IDEA 下集成SVN
  18. 3.MyBatis源码解析-CRUD执行流程--阿呆中二
  19. linux系统日志管理详解
  20. Python 关于大文件的读写

热门文章

  1. SAP WM自动创建TO后台作业报错 - Processing Type没有维护 - 之对策
  2. SAP MM PR Release Strategy 配置中Classification数据的维护
  3. AlphaCode能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了...
  4. 互联互通下的超级App价值重构
  5. 生命真的源于宇宙吗?多名宇航员身体,都曾发生“不可逆”的变化
  6. 大脑活动与认知: 热力学与信息论的联系
  7. 区分真实模式的两个标准
  8. 我们对时间的理解错了吗?
  9. 最先进的AI还不如动物聪明?首届AI-动物奥运会英国开赛!
  10. Facebook :AI 年度总结来啦