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.pswp.cn/news/257672.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257672.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257672.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速排序和折半查找

package BinarySerach;import java.util.Scanner;public class BinarySerch {/***折半查找和快速排序*/static final int N 15;static void quickSort(int [] array,int left,int right){int f,t;int ltemp left;int rtemp right;//確定分界值f array[(leftright)/2];while(…

CANVAS運用-對圖片的壓縮上傳(僅針對移動瀏覽器)

最近在移動端設計頭像上傳功能時&#xff0c;原本是以<input type"file">直接通過formData上傳&#xff0c;然而實際使用情況是&#xff1a;對于過大的圖片&#xff08;高像素手機所拍攝的照片等&#xff09;上傳時間過長會導致上傳失敗&#xff0c;而每次都上…

mysql重命名數據表稱方式_在MySQL中,使用()重命名數據表。_學小易找答案

【單選題】( )的上海文壇被稱為“張愛玲年”。【多選題】下列哪些是屬于共集放大電路的特點?()【閱讀理解】Passage Two Thailand is to ban smoking on some of the country’s most popular tourist beaches, with the prospect of up to a year in prison for those caught…

40_自定義泛型方法及其應用

java的泛型不同于C的模板方法那么強大。java的泛型只停留在編譯階段&#xff0c;編譯通過后泛型特征被擦除&#xff0c;主要因為保證jvm的效率。 用泛型知識&#xff0c;寫一個交換數組元素的方法&#xff08;此方法只適合于引用類型數組!因為int[]不會自動轉為Integer[]!&…

SQL Server代理(11/12):維護計劃作業

SQL Server代理是所有實時數據庫的核心。代理有很多不明顯的用法&#xff0c;因此系統的知識&#xff0c;對于開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。 在這一系列的上一篇&#xff0c;我們看了使用代理帳戶模仿Windows安全上下文完成作業步驟的工作。大…

mysql select array_從數據庫select查詢出來的數組

PHP中提供了array_unique函數去除一維數組中的重復項&#xff0c;但是我們實際的項目開發中&#xff0c;從數據庫select查詢出來的數組經常是二維的&#xff1b;這里面可能有重復項&#xff0c;這就需要我們自己定義函數進行去除重復項。思路&#xff1a;1、首先獲取第二維數組…

shell中字分隔的妙用:變量IFS

shell把每個 $IFS 字符對待成一個分隔符&#xff0c;且基于這些字符把其他擴展的結果分割。如果 IFS 未設置&#xff0c;或者它的值正好是 “‘<space><tab><newline>’”&#xff0c;那么任何IFS 字符的序列就送往分割字。自寫一個簡單的腳本&#xff1a;#!…

老子《道德經》第三十五章

上士聞道&#xff0c;勤而行之&#xff1b;中士聞道&#xff0c;若存若亡&#xff1b;下士聞道&#xff0c;大笑之。 不笑不足以為道。 故建言有之&#xff1a;明道若昧&#xff0c;進道若退&#xff0c;夷道若颣。 上德若谷&#xff0c;大白若辱&#xff0c;廣德若不足&#x…

php 通過類名獲取類的文件地址

$reflector new ReflectionClass("Child"); $fn $reflector->getFileName(); return dirname($fn);轉載于:https://www.cnblogs.com/bushe/p/5215718.html

大數據告訴你,電商都把假貨發給誰?

“看人下刀”&#xff0c;電商玩得更科幻 內幕&#xff1a;你在網上買件大牌化妝品&#xff0c;在訂單提交→發貨之前&#xff0c;系統會查詢分析你在全平臺的購物數據(大數據內部共享)&#xff1a;購買均價&#xff0c;常購品牌&#xff0c;退貨率。 如果你同類產品消費傾向絕…

mysql取得列類型_Mysql列類型

數值型整型&#xff1a;tinyint:微小的列類型&#xff0c;1個字節&#xff0c;默認有符號&#xff0c;存儲范圍&#xff1a;-128--127可選屬性&#xff1a;tingyint(M) unsigned zerofillM:寬度(在0填充(zerofill)時才有效),只是顯示效果&#xff0c;不影響實際數據的存儲范圍;…

XtraBackup全備與增量備份

一、XtraBackup安裝 下載地址&#xff1a;http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/ 安裝步驟&#xff1a; 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…

DHCP基本配置

第一步 安裝 DHCP [rootlocalhost ~]# yum install dhcp dhcp-devel DHCP文件簡介 /etc/dhcp/dhcpd.conf #主配置文件&#xff0c;除了括號那欄&#xff0c;其它都要結尾 ; 這樣的分號 /var/lib/dhcpd/dhcpd.leases #IP地址租約在這里 第二步 配置 DHCP 主文件配置[rootlocalho…

python arcgis 圖書_arcgis python

本書作者是GIS發方面的知名作者&#xff0c;曾著有《JavaScript構建Web和ArcGIS Server應用實戰》(Building Web and Mobile ArcGIS Server Applications with JavaScript)一書。 本書內容易學易懂&#xff0c;幫助讀者成為GIS發高手。《面向ArcGIS的Python腳本編程》是一本指導…

scrapy 讓指定的spider執行指定的pipeline

處理scrapy中包括多個pipeline時如何讓spider執行制定的pipeline管道&#xff11;:創建一個裝飾器from scrapy.exceptions import DropItemimport functools當有多個pipeline時,判斷spider如何執行指定的管道 def check_spider_pipeline(process_item_method): functools.wr…

五大常用算法之三:貪心算法

一、基本概念&#xff1a; 所謂貪心算法是指&#xff0c;在對問題求解時&#xff0c;總是做出在當前看來是最好的選擇。也就是說&#xff0c;不從整體最優上加以考慮&#xff0c;他所做出的僅是在某種意義上的局部最優解。 貪心算法沒有固定的算法框架&#xff0c;算法設計的關…

python學習筆記列表和元組(三)

列表&#xff08;list&#xff09;是Python以及其他語言中最常用到的數據結構之一。Python使用使用中括號 [ ] 來解析列表。列表是可變的&#xff08;mutable&#xff09;——可以改變列表的內容。對應操作&#xff1a;1、查&#xff08;[]切片操作&#xff09; name [tom,張三…

python 函數的調用的時候參數的傳遞_Python Unittest;如何獲取調用函數時傳遞的參數?...

我試圖做一個單元測試來檢查這個python函數(dispatch)是否傳遞了正確的參數來處理\u結果。在在dispatch中調用處理“unu result”的函數時&#xff0c;有沒有方法“劫持”輸入參數&#xff1f;我沒有在調度函數中修改代碼的權限。在以下是單元測試中的want預覽&#xff1a;impo…

博客園客戶端UAP開發隨筆 -- App連接云端內容的橋梁:WebView

當你辛苦的從網上爬下來一篇文章之后&#xff0c;怎么在你的應用內展示這些包含HTML標記的文章&#xff1f;如果你使用的是Javascript開發應用&#xff0c;恭喜你&#xff0c;直接塞進頁面就可以了&#xff0c;同時說明你很熟悉頁面開發&#xff0c;而現在windows也支持這種方式…