Hibernate的flush 和 clear 方法解释
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 方法解释相关推荐
- hibernate先删除数据,紧接着执行插入时的异常解决之道——中间不能调用flush()、clear()等方法...
hibernate先删除数据,紧接着执行插入时的异常解决之道--中间不能调用flush().clear()等方法 项目中包含这样一个寻常的业务:为某一个用户指定用户群.一个用户可以被分配到多个用户群中 ...
- 【转】Hibernate中session的clear(),flush(),evict()方法详解
1.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存. 例: [java] view ...
- Hibernate中session的clear(),flush(),evict()方法详解
一.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存.例: public void t ...
- Hibernate的evict方法和clear方法的区别
摘自百度知道:http://zhidao.baidu.com/question/63663640.html 问: 先创建一个Student,然后调用session.save方法,然后再调用evict方 ...
- clear 方法的解释及用法
1.clear 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存. 代码 @Testpublic voi ...
- NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- java nio rewind_NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- R语言DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析、使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值关系
R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析.使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值y ...
- python清空字典保留变量_python彻底清除字典数据,clear方法使用
简介 INTRODUCTION知识要点:掌握clear方法的用法来彻底清空字典 掌握只清除某个字典变量的方法 掌握普通赋值和clear方法区别 微信公众号:编程创造城市 一.内容概述: 字典是由键值对 ...
最新文章
- 活动报名 | 第三届中国法研杯司法人工智能挑战赛颁奖会日程出炉
- 【CyberSecurityLearning 64】SSRF
- (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
- wpf表格datagrid拖动列_这才是老板要的Excel表格,你做的太丑了!
- html中的文档格式及举例,跟我一起从零开始学习WebAssembly(三)、最简单的例子hello world(使用自定义HTML模板)...
- createsamples.cpp中生成vec文件的实现及详细注释、图解——人脸识别的尝试系列(三)
- 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
- 在此iphone上尚未受信任_通知:这5款iPhone过保依然可以免费维修
- Android开发的体会
- 进程间的六种通信方式
- java textbox换行符_TextBox中的空格与换行问题
- matplotlib 可视化细节,丰富的可选参数
- 2012.4.19总结(一)
- 字符串的一般性和特殊性
- 通过Kali linux 模拟CC攻击进行WEB压力测试实战
- excel 姓名汉字转拼音
- PHP 图片转PDF
- 常见坐标系经纬度转换
- 二极管(四):齐纳二极管
- MERGE JOIN CARTESIAN
热门文章
- 俄罗斯服务器购买稳定,俄罗斯RUVDS云服务器购买教程,约3元/月
- linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)...
- 全球与中国正射投影仪市场深度研究分析报告
- 定位BUG是前端还是后端问题?
- 知客CRM签约湖南省粮油食品进出口集团有限公司
- 使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果
- 按指定长度截取字符串
- 树莓派 --- 使用snowboy实现语音唤醒功能
- 为什么Wait和notify方法在Object中?
- Ubuntu20.04中安装vim