2019独角兽企业重金招聘Python工程师标准>>>

<<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来
所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.commit针对事物的
flush针对缓存的
同步到数据库中后只要没有commit还是可以rollback的public void testSave1() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();User1 user = new User1();user.setName("李四");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());//因为user的主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理//不会发出insert语句,但是id已经生成,session中existsInDatebase状态为falsesession.save(user);//调用flush,hibernate会清理缓存,执行sql//如果数据库的隔离级别设置为未提交读,那么我们可以看到flush过的数据//并且session中existsInDatebase状态为truesession.flush();//提交事务//默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush//commit后数据是无法回滚的tx.commit();}catch(Exception e) {e.printStackTrace();tx.rollback();}finally {HibernateUtils.closeSession(session);}}public void testSave2() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();User2 user = new User2();user.setName("张三1");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());//因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id//纳入了session的管理,修改了session中existsInDatebase状态为true//如果数据库的隔离级别设置为未提交读,那么我们可以看到save过的数据session.save(user);tx.commit();}catch(Exception e) {e.printStackTrace();tx.rollback();}finally {HibernateUtils.closeSession(session);}}

参考:http://blog.sina.com.cn/s/blog_4982a22a0100bp5x.html

转载于:https://my.oschina.net/zlp5201/blog/404227

Hibernate commit() 和flush() 的区别相关推荐

  1. 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...

    我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...

  2. C++ endl/ends/flush的区别

    endl与ends.flush的区别 endl表示输出并换行,ends表示输出加一个空格,flush表示什么都不加,直接输出 int main() {for (int i = 0; i < 5; ...

  3. JPA、Hibernate和Spring Data JPA区别

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...

  4. Hibernate三种状态(Transient、Persistent、Detached)各种保存(save,persist,update,saveOrUpdte,merge,flush,lock)区别

    转载地址:http://www.2cto.com/kf/201212/178604.html 一.三种状态(Transient.Persistent.Detached) 在Hibernate中有三种状 ...

  5. Hibernate的clear(),flush(),evict()方法详解

    最近看了下session,发现session.flush()方法有明显的误人子弟,明显乱说,也不对,讲的不清楚,对此我很气愤,你讲错了的让大家都跟着错了,还到处转载你的错误,你害羞么,我想问下作者. ...

  6. Hibernate Session的Flush模式

    2019独角兽企业重金招聘Python工程师标准>>> 首先要知道的是: Hibernate会尽量将与数据库的操作延迟,直到必须要与数据库进行交互,例如save方法一般会在提交时才真 ...

  7. Hibernate的openSession和getCurrentSession区别

    原文链接:http://blog.csdn.net/xiao__gui/article/details/7695698 很多资料从理论上解释hibernate的openSession和getCurre ...

  8. Hibernate getCurrentSession()和openSession()的区别

    通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...

  9. Hibernate openSession() 和 getCurrentSession的区别 .

    getHiberanteTemplate .getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去.而采用Op ...

最新文章

  1. 航天智慧物流!智能汽车竞赛—航天赛道开始报名啦!
  2. mask rcnn算法分析_在modelarts上部署mask-rcnn模型
  3. CLI下的网页浏览器之二——Lynx
  4. div中同时存在文本和数字超过两行出省略号
  5. 今天的我家有12口人的即时通讯
  6. 【Elasticsearch】elasticsearch 分片
  7. C#+HtmlAgilityPack+Dapper走一波爬虫
  8. Mysql5.7中文乱码
  9. Linux脚本中带有小数点的数值比较大小
  10. html5 拖放游戏,HTML5拖放API实现拖放排序的实例代码
  11. spring boot访问zul页面总是变为下载页面
  12. Executing statements
  13. 奥运门票系统down机的技术问题
  14. ASP.NET 基于asp.net设计项目框架
  15. javapoet的认识
  16. ME59N 自动创建采购订单的凭证类型NB变更为指定类型Zxxx
  17. 如何持续、正确、安全地把材料性能检测试验做好:“清单革命”读书报告
  18. 从“赌场”到“大市场”——巴菲特进阶式看中国
  19. LeetCode知识点总结 - 844
  20. 花了三年时间开发的四轴运动控制卡,可以替代mcx314运动控制IC

热门文章

  1. stacking与blending的区别
  2. 计算机科学与技术分享会,“相伴成长,绘梦未来”——计算机科学学院计算机科学与技术专业举办交流分享会...
  3. 【postgresql初始化失败】initdb: invalid locale settings; check LANG and LC_* environment variables(之二)
  4. 自定义注解做数据验证
  5. 项目进度管理:定义活动
  6. 删除文件夹中包含的子文件夹及文件
  7. Three.js中实现点击按钮添加删除旋转立方体
  8. Android入门学习教程PDF免费下载
  9. VS中使用C#开发一个登录窗体应用程序
  10. Python中通过MyQR生成gif动图二维码