flush(), clear(), save()的简单解释
hibernate最新发布包的javadoc里对这三个方法的解释是:
clear() :Completely clear the session.清空session,该清空操作只对于要保存的、删除的和修改的数据起作用,不涉及查询的结果。
close() :End the session by releasing the JDBC connection and cleaning up.释放并清空JDBC连接。但是不一定非得关闭session。
flush(): Force this session to flush.强制刷新流的缓冲。flush必须在一个操作单元结束之后且在提交事务和关闭连接之前被调用。例如插入一条数据。
sess.save(user);的意思是将user持久化,也就是说把数据插入到数据库中。清空缓存是在持久化之后进行的。至于要不要清空缓存,是要看你的FlushMode是怎么设置的。
session.clear()方法负责清空session缓存中的实体对象,不管缓存中数据是否与数据库记录一致;
session.flush()方法负责同步session缓存中的实体对象与数据库记录,保持数据的一致性。
@Test
public void testSessionClear() {
Session session = sessionFactory.openSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 3);
System.out.println(t.getName());
session.clear(); //这里不clear只会执行一次sql语句,有clear会执行2次
Teacher t2 = (Teacher) session.get(Teacher.class, 3);
System.out.println(t2.getName());
session.getTransaction().commit();
}
如果不是clear(),由于一级缓存的存在,查询同样的记录,只会发出一条sql语句;如果清空了session缓存,那么这里会发出2条sql语句。
@Test
public void testFlush()
{
Session session = sessionFactory.openSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 3);
t.setName("xiu");
session.flush(); //有flush会执行2次UPDAE,没有会只执行一次
t.setName("aty");
session.getTransaction().commit();
}
如果不执行flush,只会发出一条update语句;执行了flush,会发出2条update语句,也就是说flush会强制缓存与数据库数据同步
flush(), clear(), save()的简单解释的更多相关文章
- MongoDB中insert方法、update方法、save方法简单对比
MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...
- hibernate flush clear的区别
有的时候你执行了更新什么的操作不一定能查出来:没有保存到数据库 以下的缓存是指一级缓存,即session:默认缓存是一级缓存: flush的意思就是执行sql,但是还没有commit,没有持久化:再清 ...
- 如何简单解释 MapReduce算法
原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...
- static_cast 、const_cast、dynamic_cast、reinterpret_cast 关键字简单解释
static_cast .const_cast.dynamic_cast.reinterpret_cast 关键字简单解释: Static_cast 静态类型转换 ①用于类层次结构中基类(父类)和派生 ...
- 单个body|简单解释|复杂解释|反面解释
单个body有三种方法简单解释.复杂解释和反面解释 ========================================================================== ...
- 麦克斯韦方程组 (Maxwell's equation)的简单解释
[转载请注明出处]http://www.cnblogs.com/mashiqi 2016/12/12 以下会用高中的物理知识和大学微积分的数学知识对麦克斯韦方程组进行一个简单的解释.希望大家都能看得懂 ...
- ssh架构简单解释和vo po解释
Struts.spring.Hibernate在各层的作用 1)struts 负责 web层. ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forwa ...
- GMM简单解释
1.GMM(guassian mixture model) 混合高斯模型,顾名思义,就是用多个带有权重的高斯密度函数来描述数据的分布情况.理论上来说,高斯分量越多,极值点越多,混合高斯密度函数可以逼近 ...
- TCP/IP模型的简单解释
TCP/IP模型是互联网的基础.想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大 ...
随机推荐
- [转]生成 Excel.dll
来自:http://bbs.csdn.net/topics/330137762 默认的情况下microsoft excel 11.0 object library对象是一个.exe文件,所以我们需要利 ...
- jquey XMLHttpRequest cannot load url.Origin null is not allowed by Access-Control-Allow-Origin
此篇文章原文地址:http://blog.csdn.net/wangsky2/article/details/22961345 正文: 原文地址:http://stackoverflow.com/qu ...
- [UE4]为什么会有类型检查
类型检查 定义:对象的行为是否符合类型的行为 作用:帮助开发者找出潜在的错误. 类型转换 隐式类型转换:整数可以和浮点数运算 显式类型转换/强制类型转换
- 【Codeforces】CF 8 C Looking for Order(状压dp)
题目 传送门:QWQ 分析 这种题不会做 吃枣药丸..... 想到状压已经经过的点. 然后更新时枚举两个点加进去. 复杂度$ {O(2^n \times n^2)}$. 凉凉. 真正的做法是每一个状 ...
- Oracle内存详解之二 Library cache 库缓冲-转载
Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedu ...
- ORACLE V$lock视图TYPE,ID1,ID2取值的含义
在oracle v$lock视图中,下面对type,ID1,ID2三个列的具体含义说明下: TYPE 有TM,TX两种类型,TX为行级锁,事物锁,TM锁为表级锁 TYPE ID1 ID2 TM 被 ...
- python输出格式化及函数format
格式 描述%% 百分号标记%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x ...
- SparkStreaming 的编程模型
依赖管理 基本套路 Dstream输入源 ---input DStream Dstream输入源--- Receiver 内置的input Dstream : Basic Source 内置的inpu ...
- ElasticSearch 搜索原理
运行结果:返回5条数据 参考代码ESTestDocumentAPI.java package com.dajiangtai.djt_spider.elasticsearch; import java. ...
- Fork-Join 原理深入分析(二)
本文是将 Fork-Join 复杂且较为庞大的框架分成5个小点来分析 Fork-Join 框架的实现原理,一个个点地理解透 Fork-Join 的核心原理. 1. Frok-Join 框架的核心类 ...