`
kidd
  • 浏览: 179788 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

session.flush()[转载]

阅读更多
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或者是其他的应用程序看到的仍然还是数据库以前的数据。(可以试验)
分享到:
评论

相关推荐

    hibernate的session.flush

    博文链接:https://llying.iteye.com/blog/221702

    hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别.docx

    首先session是有一级缓存的,目的是为了...3.session.refresh():会强制发送select语句,以使session缓存中对象的状态和数据表中对应的记录保持一致。该方法的有效性需要配置事务的隔离级别为read commited(读已提交)。

    Hibernate查询语言

    14.1. 批量插入(Batch inserts) 如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 ...session.flush(); session.clear(); } } tx.commit(); session.close(); 14.2. 批量更新(Batch updates)

    通过Response.Flush()实现下载失败的解决方法

    Response.Flush()实现对服务端文件的下载时,会失败,不能正常弹出IE下载框,通过测试发现时浏览器的安全设置问题,如下操作便可解决

    Response.Flush的使用心得

    此时我们就会用到Response.flush()。他会将缓冲区中编译完成的数据先发送到客户端。 但是有很多时候,我们发现即使我们使用了Response.Flush(),但是并没有将前面的信息发到客户端来显示。呈献给我们的依然是白屏。...

    asp Response.flush 实时显示进度

    如果你知道Response.Flush和Response.Clear,那你就可以不用这样的等待了。每生成一个Html页面,就用Response.write立即返回一条信息,提示该条数据库记录已经生成Html。

    hibernate的flush机制

    对hibernate的flush机制有兴趣可以看看

    hibernate执行原生sql语句

    session.flush(); return null; } }); } ``` 在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在...

    通过HttpURLConnection获取SESSIONID

    out.flush(); out.close(); out.write(parameters.getBytes(),0,parameters.getBytes().length); InputStream in = hc.getInputStream(); InputStreamReader reader = new InputStreamReader(in,"gb...

    MySQL-Flush命令用法.docx#资源达人分享计划#

    MySQL Flush 命令用法详解 MySQL Flush 命令是 MySQL 中的一种非常重要的命令,它可以用于清除或重新加载各种高速缓存、表或者获取锁等。执行 Flush 命令必须要有 reload 权限。今天,我们将详细介绍 MySQL Flush ...

    FileCopy.zip

    FormerOpen.Flush(); //清空缓存 ToFileOpen.Write(buffer, 0, (int)FormerOpen.Length); //写入字节 ToFileOpen.Flush(); //清空缓存 FormerOpen.Close(); //释放所有资源 ...

    hibernate_reference中文文档.pdf

    3.8.3. 在 JTA 环境下使用 Current Session context(当前 session 上下文) 管理 .................................................................. 48 3.8.4. JMX 部署 ........................................

    记录模型训练时loss值的变化情况

    sys.stdout.flush() if verbose: sys.stdout.write('\r') sys.stdout.flush() 一般我们在训练神经网络模型的时候,都是每隔多少步,输出打印一下loss或者每一步打印一下loss,今天发现了另一种记录loss变化的...

    handleStream ServletOutputStream out = response.getOutputStream(); InputStream i

    NULL 博文链接:https://nethub2.iteye.com/blog/2023937

    安卓动态分析平台droidbox

    可以用于安全地观察APK包的行为,具体使用方法参见官网http://code.google.com/p/droidbox/

    Android-一个精简全面方便的AndroidLog库--ALog

    一个精简、全面、方便的AndroidLog库--ALog

    MD5加密解密

    MD5 加密 解密 public string EnCode(string data) { byte[] byKey = System.Text.... sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); }

    blk-flush.rar_flush

    Functions to sequence FLUSH and FUA writes driver for Linux

Global site tag (gtag.js) - Google Analytics