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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、Clear 方法

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

public void testClear()  
{    Session session =  HibernateUitl.getSessionFactory().getCurrentSession();    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();  10.}    
} 

 二、Flush 方法

可以强制进行从内存到数据库的同步。例:

public void testFlush(){    Session session =  HibernateUitl.getSessionFactory().getCurrentSession();    session.beginTransaction();    Teacher t = (Teacher) session.get(Teacher.class, 3);    t.setName("yyy");    session.flush();//有flush会执行2次UPDAE,没有会只执行一次    t.setName("yyyyy");    session.getTransaction().commit();    
}   

 

Flush方法是可以设置的,也就是 fulsh 什么时候执行是可以设置的,在session.beginTransaction 前设置 FlushMode

session.setFlushMode(FlushMode.Always|AUTO|COMMIT|NEVER|MANUAL);  

这里 FlushMode 有 5 个值可选

Always: 任何代码都会 Flush

AUTO: 默认方式 – 自动

Commit: COMMIT 时

Never: 始终不

MANUAL: 手动方式

设置 FlushMode 有个好处是可以节省开销,比如默认 session 只做查询时,就可以不让他与数据库同步了。

三、Evict 方法

会把指定的缓冲对象进行清除,而 Clear 方法则是把缓冲区内的全部对象清除,但不包括操作中的对象。

注意事项: Flush 方法和 Evict 方法一起使用出现的问题

Flush 方法和 Evict 方法一起使用出现的时候,一定要注意使用的顺序,否知会出现异常。下面的代码就是正确的使用顺序:

//因为user的主键生成策略采用的是uuid,所以调用完成save后,  
//只是将user纳入到了session的管理  
//不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false  
session.save(user);  
//flush后hibernate会清理缓存,会将user对象保存到数据库中  
//(强制更新数据库,结果但不一定,因为commit时候可能会出现事物回滚)  
//并且设置session中existsInDatebase的状态为true  
session.flush();  
//将user对象从session中逐出,即session的EntityEntries属性中逐出  
session.evict(user);  
//可以成功提交,因为hibernate在清理缓存时,  
//在session的insertions集合中无法找到user对象  
//所以就不会发出insert语句,也不会更新session中的existsInDatabase的状态  
tx.commit();  

 

转载于:https://my.oschina.net/airship/blog/1517982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

40_自定义泛型方法及其应用

java的泛型不同于C的模板方法那么强大。java的泛型只停留在编译阶段,编译通过后泛型特征被擦除,主要因为保证jvm的效率。 用泛型知识,写一个交换数组元素的方法(此方法只适合于引用类型数组!因为int[]不会自动转为Integer[]!&…

SQL Server代理(11/12):维护计划作业

SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作。大…

XtraBackup全备与增量备份

一、XtraBackup安装 下载地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/ 安装步骤: How to build XtraBackup on Linux Prerequisites -------------$ yum install cmake gcc gcc-c libaio libaio-devel automake autocon…

《大话设计模式》 国外资料

It is not easy to remember all design patterns. Here are some stories about design patterns which might help! Creational Singleton – Only one president in AmericaFactory – A factory that produces humanAbstract Factory – An abstract factory to produce CP…

python arcgis 图书_arcgis python

本书作者是GIS发方面的知名作者,曾著有《JavaScript构建Web和ArcGIS Server应用实战》(Building Web and Mobile ArcGIS Server Applications with JavaScript)一书。 本书内容易学易懂,帮助读者成为GIS发高手。《面向ArcGIS的Python脚本编程》是一本指导…

博客园客户端UAP开发随笔 -- App连接云端内容的桥梁:WebView

当你辛苦的从网上爬下来一篇文章之后,怎么在你的应用内展示这些包含HTML标记的文章?如果你使用的是Javascript开发应用,恭喜你,直接塞进页面就可以了,同时说明你很熟悉页面开发,而现在windows也支持这种方式…

C4.5

C4.5是机器学习算法中的另一个分类决策树算法,它是基于ID3算法进行改进后的一种重要算法,相比于ID3算法,改进有如下几个要点: 用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,这里可以用很多方法来定义信息…

谈谈分布式事务之三: System.Transactions事务详解[下篇]

在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法。该方法对用于创建基于现有Transaction对 象的“依赖事务(DependentTransaction)”。不像可提交事务是一个独立的事务对象,依赖事务依附于…

iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计。今天我们就针对iOS的触摸事件(手势操作)、运动事件、远程控制…

python为什么忽然火了_为什么Python突然就火了起来了呢?

近日,TIOBE发布10月编程语言排行榜显示,15年来TIOBE指数的前8名一直保持不变,而Python正在成为一种新的大型语言。越来越多的企业在使用Python进行开发,越来越多的人正在加入Python程序员行列!TIOBE 10月编程语言排行榜前20名Pyth…

ARP扫描工具arp-scan

2019独角兽企业重金招聘Python工程师标准>>> ARP扫描工具arp-scan arp-scan是Kali Linux自带的一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR、地址范围或者列表文件的方式指定。该工具…

elementui el-from 怎样显示图片_vue2.0使用weui.js的uploader组件上传图片(兼容移动端)...

本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发、Nodejs、Python、Linux、IT资讯等板块.最近在使用 vue2.0开发微信公众号网页 其中涉及到 选择图片, 图片的压缩上传, 预览, 删除等操作。项目整体UI框架使用的是 vux, 但可惜的…

面向对象分析

在需求获取阶段,开发人员关注于理解用户以及他们的使用要求。而在需求分析阶段,开发人员关注于理解系统需要构建的内容,其核心是产生一个准确的、完整的、一致的和可验证的系统模型,称为分析模型。 面对对象的分析模型由三个独立的…

51nod 1050 循环数组最大子段和

1050 循环数组最大子段和 N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]a[i1]…a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时…

Spark- Linux下安装Spark

Spark- Linux下安装Spark 前期部署 1.JDK安装,配置PATH 可以参考之前配置hadoop等配置 2.下载spark-1.6.1-bin-hadoop2.6.tgz,并上传到服务器解压 [rootsrv01 ~]# tar -xvzf spark-1.6.1-hadoop2.6.tgz /usr/spark-1.6.1-hadoop2.6 3.在 /usr 下创建软链接到目标文…

python需要背的英语单词怎么写_学Python必须背的42个常见单词,看看你都会吗?...

这42个单词是学习Python必须背会的单词,也是代码中常见的单词。希望你能都背下来!!1. adult [ˈdʌlt] 成年人2. authentication [ɔːˌθentɪˈkeɪʃn] 身份验证、认证、鉴定3. bit [bɪt] 稍微、小量、小块、一点4. byte [baɪt] …

asp.net mvc4开启SqlServer 会话共享模式

2019独角兽企业重金招聘Python工程师标准>>> 应用部署结构(精简): 站点部署在Nginx后面,以Nginx作为反向代理,不希望在Nginx上设置ip_hash,实现比较真实的负载均衡效果。 这时考虑到需要让site1和site2同时…

【转】(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components

原创至上,移步请戳:(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components 4、Interaction Components 本节涵盖了处理交互,例如鼠标或触摸事件和使用键盘或控制器交互的 UI系统中的组件。 4.1 Select…

j2ee 简单网站搭建:(十)jquery ztree 插件使用入门

为什么80%的码农都做不了架构师?>>> 《j2ee 简单网站搭建:(一) windows 操作系统下使用 eclipse 建立 maven web 项目》《j2ee 简单网站搭建:(二)添加和配置 spring spring-mvc 的…

实习报告

实习时间:2016/2/18-2016/2/24 实习地点:陕西省米脂县公安局网络警察大队     实习报告: 如今的社会,网络高度发展,一些人随着时代的潮流利用网络发家致富,而有些人利用网络监管的一些漏洞,…