[转载]session.flush()

转载 2007年09月25日 11:00:00
hibernate一个Session有一个Cache,cache屏蔽了应用程序直接去访问数据库,如果同一张table的同一row在先前已经被请求过,那么为何下次请求的时候还要去请求一次呢,把前面的cache住,再遇到这样的请求直接返回cache里边的即可。

cache 里边的数据如果含有脏数据,需要跟数据库同步(也就是需要hibernate来发送update, delete, insert),调用session.flush()达到此目的。一般情况下,hibernate在一个tx.commit()的时候会自动调用 session.flush();也可以应用程序手动调用session.flush()来立刻将session的脏数据提交。
Session session = HibernateSessionFactory.currentSession();
        Transaction tx = session.beginTransaction();
        try{
         Employee employee1 
= (Employee)session.load(Employee.class, new Integer(3));
         System.out.println(employee1);
         employee1.setAge((byte)98);
         session.flush();//发送employee1的update给数据库
//         employee1.setAge((byte)43);
         tx.commit();//employee1已经被flush过,不会再被flush。如果把上面以行代码注释取消,还会再发一条update语句。
        }
        catch(HibernateException e){
            e.printStackTrace()
;
            tx.rollback();
        }

         tx 
= session.beginTransaction();
        Employee employee2 = (Employee) session.load(Employee.class, new Integer(3));
        employee2.setGender('f');
        System.out.println(employee2);
        tx.commit();

session.flush()的动作执行的时候,session中cache不会被清空,所以上面的employee2和employee1返回的还是同一个实例。

那些被flush()过的对象不会在下次flush()的时候再被flush()一次,除非两次flush()中间又产生了新的脏数据。

我 认为应用程序基本上不需要显示去调用session.flush();而交给tx.commit()去做就可以了。原因是:手动调用 session.flush()虽然是往数据库提交了update等sql语句,但是这些update真正的commit是在tx.commit()执行 的时候。所以手动session.flush()后,其他的session或者是其他的应用程序看到的仍然还是数据库以前的数据。(可以试验)

session.flush()

session的save方法为例来看一个简单、完整的事务流程,如下是代码片段:  …………………………………………………………………………  Session session = sessi...
  • u010716332
  • u010716332
  • 2013年07月19日 12:08
  • 964

Hibernate中Session的flush方法介绍

以session的save方法为例来看一个简单、完整的事务流程,如下是代码片段: ………………………………………………………………………… Session session =session...
  • abc19900828
  • abc19900828
  • 2014年09月23日 16:29
  • 2339

hibernate中的session.flush()和commit()的区别

1、flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来   所...
  • zmx729618
  • zmx729618
  • 2016年05月19日 16:49
  • 6736

NHibernate中ISession的Flush理解

开始老不知道在执行Insert或者Delete,update之后为什么要调用Flush(),后来看了http://www.cnblogs.com/lyj/archive/2008/10/17/1313...
  • JimFire
  • JimFire
  • 2009年07月05日 22:24
  • 3016

如何转载CSDN博客

小弟我刚大学毕业,正在找工作,在家等面试的时候就想着看点什么。面试的时候,什么都问你。如果有问题把你问住了,那基本就完了。**,out。 刚看了几篇郭霖大神的几篇博客,就像转载下来,以后自己留着看。结...
  • ppiglets
  • ppiglets
  • 2016年06月27日 15:40
  • 973

一键转载CSDN博客

前言  将喜欢的博客进行转载是对博客的收藏,也能够在以后不断的提高自己,而CSDN并没有一键转载功能,现在提供一种方法方便大家进行转载。实现   我们首先打开要转载的博客,然后鼠标右键就会出现下面的菜...
  • kevinelstri
  • kevinelstri
  • 2017年03月09日 13:38
  • 570

csdn如何转载博客

1、找到要转载的文章,用chrome浏览器打开,右键选择审查元素 2、在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中...
  • sddxqlrjxr
  • sddxqlrjxr
  • 2015年11月15日 19:12
  • 2995

Hibernate4中的session简述

1.Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. 2.Session 具有一个缓存...
  • dq3wrr
  • dq3wrr
  • 2014年08月20日 16:55
  • 651

深入Hibernate的flush机制

一、理解flush机制 之后单纯用原始的Hibernate框架做了一些验证,并且打开执行SQL打印输出台的,得出的结论: 前提是在同一事务中间: ...
  • a511596982
  • a511596982
  • 2012年12月22日 20:45
  • 3823

CSDN如何转载他人文章

利用Markdown可以解析html的特点,我们可以很方便的转载他人的文章。
  • Michael753951
  • Michael753951
  • 2017年04月21日 04:01
  • 521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转载]session.flush()
举报原因:
原因补充:

(最多只允许输入30个字)