1.flush

flush是Hibernate强制更新、将session与数据库同步的一种方法

请看以下代码

@Test
    public void flush() {
        Session session = sf.openSession();
        Transaction tx = session.beginTransaction();
        
        User user=null;
        user=(User) session.get(User.class, 1);
        user.setUserName("jack");
        
        session.flush();
    
        user.setUserName("jack_new");
            
        tx.commit();
        session.close();

输出的结果是 Hibernate: update A set userName=? where userId=?
                         Hibernate: update A set userName=? where userId=?

说明数据库已经更新过两次,

而如果将  session.flush();删除,那么只会更新一次

这就是flush的作用

2.clear

clear是Hibernate一种强制清除所有session缓存的方法,

请看以下对比代码

2.1、这是没有clear方法的代码

public void clear() {
        Session session = sf.openSession();
        Transaction tx = session.beginTransaction();
        
        User user=null;
        
        user=(User) session.get(User.class, 1);
        
    
        user=(User) session.get(User.class, 1);
        
        tx.commit();
        session.close();

这里输出Hibernate: select user0_.userId as userId0_0_, user0_.userName as userName0_0_ from A user0_ where user0_.userId=?
只有一条查询结果

2.2、这是有clear方法的代码

public void clear() {
        Session session = sf.openSession();
        Transaction tx = session.beginTransaction();
        
        User user=null;
        
        user=(User) session.get(User.class, 1);
        session.clear();
    
        user=(User) session.get(User.class, 1);
        
        tx.commit();
        session.close();

这里输出Hibernate: select user0_.userId as userId0_0_, user0_.userName as userName0_0_ from A user0_ where user0_.userId=?
                Hibernate: select user0_.userId as userId0_0_, user0_.userName as userName0_0_ from A user0_ where user0_.userId=?
              两条运算结果

结论:有clear清除了session一级缓存,那么红色部分的user获取只能从数据库中拿到,所以拿到两个结果(因为session的get方法会 先检查缓存中是否有数据,如果有不查询数据库,直接从缓存中获取)

但是2.1中的user获取是在同一个session缓存区中拿的,所以他们本来就是同一个缓存区域里的东西,所以输出来的只有一个结果。

总结:

缓存相关几个方法的作用

session.flush();       让一级缓存与数据库同步

session.evict(arg0);    清空一级缓存中指定的对象

session.clear();       清空一级缓存中缓存的所有对象

Hibernate的flush 和 clear 方法解释相关推荐

  1. hibernate先删除数据,紧接着执行插入时的异常解决之道——中间不能调用flush()、clear()等方法...

    hibernate先删除数据,紧接着执行插入时的异常解决之道--中间不能调用flush().clear()等方法 项目中包含这样一个寻常的业务:为某一个用户指定用户群.一个用户可以被分配到多个用户群中 ...

  2. 【转】Hibernate中session的clear(),flush(),evict()方法详解

    1.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存. 例: [java] view ...

  3. Hibernate中session的clear(),flush(),evict()方法详解

    一.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存.例: public void t ...

  4. Hibernate的evict方法和clear方法的区别

    摘自百度知道:http://zhidao.baidu.com/question/63663640.html 问: 先创建一个Student,然后调用session.save方法,然后再调用evict方 ...

  5. clear 方法的解释及用法

    1.clear 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存. 代码 @Testpublic voi ...

  6. NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  7. java nio rewind_NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  8. R语言DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析、使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值关系

    R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析.使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值y ...

  9. python清空字典保留变量_python彻底清除字典数据,clear方法使用

    简介 INTRODUCTION知识要点:掌握clear方法的用法来彻底清空字典 掌握只清除某个字典变量的方法 掌握普通赋值和clear方法区别 微信公众号:编程创造城市 一.内容概述: 字典是由键值对 ...

最新文章

  1. 活动报名 | 第三届中国法研杯司法人工智能挑战赛颁奖会日程出炉
  2. 【CyberSecurityLearning 64】SSRF
  3. (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
  4. wpf表格datagrid拖动列_这才是老板要的Excel表格,你做的太丑了!
  5. html中的文档格式及举例,跟我一起从零开始学习WebAssembly(三)、最简单的例子hello world(使用自定义HTML模板)...
  6. createsamples.cpp中生成vec文件的实现及详细注释、图解——人脸识别的尝试系列(三)
  7. 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
  8. 在此iphone上尚未受信任_通知:这5款iPhone过保依然可以免费维修
  9. Android开发的体会
  10. 进程间的六种通信方式
  11. java textbox换行符_TextBox中的空格与换行问题
  12. matplotlib 可视化细节,丰富的可选参数
  13. 2012.4.19总结(一)
  14. 字符串的一般性和特殊性
  15. 通过Kali linux 模拟CC攻击进行WEB压力测试实战
  16. excel 姓名汉字转拼音
  17. PHP 图片转PDF
  18. 常见坐标系经纬度转换
  19. 二极管(四):齐纳二极管
  20. MERGE JOIN CARTESIAN

热门文章

  1. 俄罗斯服务器购买稳定,俄罗斯RUVDS云服务器购买教程,约3元/月
  2. linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)...
  3. 全球与中国正射投影仪市场深度研究分析报告
  4. 定位BUG是前端还是后端问题?
  5. 知客CRM签约湖南省粮油食品进出口集团有限公司
  6. 使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果
  7. 按指定长度截取字符串
  8. 树莓派 --- 使用snowboy实现语音唤醒功能
  9. 为什么Wait和notify方法在Object中?
  10. Ubuntu20.04中安装vim