java 高級編程進階_JAVA高級編程之hibernate進階學習

二級緩存

hibernate的session緩存

在事務級別進行持久化數據的緩存操作。 當然,也有可能分別為每個類(或集合),配置集群、或 JVM 級別(SessionFactory 級別)的緩存。你甚至可以為之插入一個集群的緩存。注意,緩存永遠不知道其他應用程序對持久化倉庫(數據庫)可能進行的修改 (即使可以將緩存數據設定為定期失效)。

session緩存 :

session緩存是由一系列的Java集合構成的。當一個對象被加入到Session緩存中,這個對象的引用就加入到了java的集合中,以后即使應用程序中的引用變量不再引用該對象,只要Session緩存不被清空,這個對象一直處于生命周期中。

session作用:

1)減少訪問數據庫的頻率。

2)保證緩存中的對象與數據庫中的相關記錄保持同步。

Session清理緩存的時機:

1)當調用Transaction的commit()方法時,commit()方法先清理緩存(前提是FlushMode.COMMIT/AUTO),然后再向數據庫提交事務。

2)當應用程序調用Session的find()或者iterate()時,如果緩存中的持久化對象

的屬性發生了變化,就會先清理緩存,以保證查詢結果能反映持久化對象的最新

狀態。

3)當應用程序顯示調用Session的flush()方法的時候。

Hibernate對象的狀態

1)瞬時態Transient:

含義:由new操作符創建,且尚未與Hibernate Session關聯的對象。處于瞬時態的java對象成為臨時對象。

特點:不處于Session的緩存中,即不被任何一個Session實例關聯。

在數據庫中沒有對應的記錄。

2)持久態Persistent

含義:已經被持久化,加入到Session的緩存中,處于持久化狀態的java對象被稱為持久化對象。

特點:位于一個Session實例的緩存中。

持久化對象在數據庫中有相應的記錄,Session在清理緩存時,會根據持久化對象的屬性變化來同步更新數據庫。

當一個持久化對象關聯一個臨時對象,在允許級聯保存的情況下,Session在清理緩存的時候會把這個臨時對象也轉變為持久化對象。

3)脫管態Detached

含義:已經被持久化,但不再處于Session的緩存中,處于脫管狀態的java對象稱為游離對象。

特點:不再位于Session的緩存中,即不被Session關聯。

游離對象是由持久化對象轉變過來的,因此在數據庫存在與之對應的記錄(前提是沒有其他程序刪除了這條記錄)。

hibernate對象狀態裝換圖如下圖所示:

88587bde64b5

Session API :

Session接口是Hibernate向應用程序提供的操縱數據庫的最主要的接口,它提供了基本的保存,更新,刪除和查詢的方法。

save():把一個臨時對象加入到緩存中,使它變成持久化對象

如果在save()方法之后,又修改了持久化對象的屬性,會使得Session在清理緩存的時候額外執行SQL update語句。

注意:save()方法是用來持久化一個臨時對象的!

update():把Object對象重新加入到Session緩存中,使之變為持久化對象。

計劃一條update語句,只有在清理緩存的時候才會執行,并且在執行的時候才會把參數對象中的屬性值組裝到update語句中。

注意:update()是將一個游離對象轉變為持久化對象的。

saveOrUpdate():同時包含了save()與update()方法的功能,如果傳入的參數是臨時對象,調用save方法,如果參入參數是游離對象,調用update()方法,如果傳入的是持久化對象,直接返回。

load()/get():都會根據給定的OID從數據庫中加載一個持久化對象,區別在于,當數據庫中不存在與OID對應的記錄時,load()方法會拋出ObjectNotFoundException異常,而get()方法返回null。

delete():于從數據庫中刪除與參數對象對應的記錄,如果傳入的參數是持久化對象,Session就計劃執行一個delete語句,如果傳入的參數是游離對象,先使游離對象被Session關聯,使它變為持久化對象,然后計劃一個delete語句,在清理緩存的時候執行。

evict():從緩存中清除參數指定的持久化對象。

clear():清空緩存中所有持久化對象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538439.shtml

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

相關文章

SpringMvc+Tomcat+Angular4 部署運行

這次的團隊開發是,前端開發人員和后臺開發人員完全分開開發的。 前端開發采用了Angular4,webstorm 后端開發采用了:springspringmvcmybatis,eclipse --------------------------------------- 最后要整合了。 1、angular項目編…

python爬蟲本科容易找工作嗎_python爬蟲基礎學完了,我真的能找到一份工作嗎?...

1.能不能找到工作我覺得取決于你技術掌握的程度。2.無論在什么領域,只要你技術到家,都不用愁找不到工作。3.多數人問他們轉行能不能找到工作,是想知道這個崗位需要的人多不多,在爬蟲這個領域,從事這方面的人應該也不少…

jqgrid demo java_java – jqgrid如何顯示服務器端消息

我使用jqGrid以表格格式顯示數據,使用JSP和servlet.編輯我想在執行插入,更新,刪除等操作時顯示來自服務器的錯誤. (數據類型:“xml”)jqGrid的jQuery("#list10_d").jqGrid({height:250,width:600,url:Assignment?actionAssign,datatype: "xml"…

IPv4地址分類及特征

IPv4地址分類及特征 IP地址后斜杠和數字代表的意思 其中有這樣一個IP地址的格式:IP/數字,例如:111.222.111.222/24這種格式平時在內網中用的不多,所以一下子看不懂,最后查了資料才知斜杠后的數字代表的是掩碼的位數 “…

查看Scala編譯的.class文件

Scala是基于JDK運行的,必然會生成Java的字節碼文件.class文件。 如何查看? 編碼IDE:IntelliJ IDEA 2017.2 x64 查看class文件工具:jd-gui scala代碼如下: person.scala package cn.zengmg.day26class Person {val …

python傳文件給堡壘機上遠程的另一個機器_如何用hive調度堡壘機上的python腳本...

工作中,如果我們本地要操作的數據量大,那么主機是跑不起來python腳本的,這個時候,就要用到服務器(也叫堡壘機)了。那么如何用HIVE調用堡壘機上的python腳本呢?今天小白就總結一下步驟和一些注意事項~1.首先將Python腳本…

SecureCRT如何導出導入配置文件

以SecureCRT7.2.5為例 Options-----Global Options -----General -----Configuration Paths 備份: 進入該文件夾,復制里面的內容到要備份的地方 還原: 將上面的復制的文件,拷貝到 Configuration Paths 下

【原創】利用騰訊和百度的AI接口識別驗證碼

眾所周知,驗證碼在大部分的實際運用中是繞不開的問題,包括驗證,爬蟲,測試等等,然后解決驗證碼的方法也有不少,但大多數都會運用OCR。(這里說的驗證碼,是字符類型的驗證碼&#xff09…

在java中5 % 3_Java基礎5

Java多線程:進程:進行中的程序線程:就是進程中一個負責程序執行的控制單元(執行單元)一個進程中可以多執行路徑,稱之為多線程一個進程至少一個線程開啟多個線程是為了同時運行多部分代碼每個線程都有自己運行的內容,這個內容成為線程要執行的任務多線程的…

scala中:: , +:, :+, :::, +++的區別

原文鏈接:https://segmentfault.com/a/1190000005083578 ------------------------------------------------------------- 4種操作符的區別和聯系 :: 該方法被稱為cons,意為構造,向隊列的頭部追加數據,創造新的列表。用法為 x::…

python包管理機制_Go 1.5之前的多種包管理機制簡介(

在 Go 語言中,我們可以使用go get命令安裝遠程倉庫中托管的代碼,不同于 Ruby Gem、pypi 等集中式的包管理機制, Go 語言的包管理系統是去中心化的。簡單來講,go get命令支持任何一個位置托管的 Git 或 Mercurial 的倉庫&#xff0…

nc命令簡介

nc介紹 ncat/nc 既是一個端口掃描工具,也是一款安全工具,還能是一款監測工具,甚至可以做為一個簡單的 TCP 代理。 在大多數 Debian 發行版中,nc 是默認可用的,它會在安裝系統的過程中自動被安裝。 但是在 CentOS 7 / R…

java時間日期工具類_java工具類--日期相關;

日期相關Date類1.通常使用的是java.util包2.導包 拿來使用 構建對象3.通常使用無參數的構造方法 或者帶long構造方法4.Date類中常用的方法before(); after();setTime() getTime()compareTo(); -1 1 0;5.可以處理一個Date類型的格式DateFormat類1.包java.text 需要導包使用2.此類…

/* compiled code */ ?

原因:這是所用的ide自帶了反編譯工具,反編譯的。不是具體的源碼 具體的源碼需要手動關聯源碼包

python判斷矩陣是否對稱_Python創建對稱矩陣的方法示例【基于numpy模塊】

本文實例講述了Python創建對稱矩陣的方法。分享給大家供大家參考,具體如下:對稱(實對稱)矩陣也即:step 1:創建一個方陣>>> import numpy as np>>> X np.random.rand(5**2).reshape(5, 5)>>> Xarray([…

重新學習Ubuntu -- 截圖軟件的選擇和安裝

前面兩篇完成了:系統的安裝和系統安裝后的優化。 截圖軟件 shutterflameshot 這個根據自己原來的學習經驗和網上的相關資料來完成截圖軟件的安裝。參照文章: shutter :Ubuntu 18.04/LinuxMint 19中啟用Shutter編輯功能 flameshot:Flameshot:你…

Scala-Actor并行wordcount

scala-2.10.6 文件: "d://word.txt", "d://word.log" 文件內容: 代碼: package cn.zengmg.day26.actorimport scala.actors.{Actor, Future} import scala.collection.mutable.ListBuffer import scala.io.Sourcecase c…

小程序測試用例模板_微信小程序樣式:高質量小程序樣式模板大全

新手想要制作出美觀的小程序,你需要多參考一些好看的微信小程序樣式。今天就帶大家分析幾個高質量小程序的樣式,看看別是怎么把小程序做得美觀又吸引人的:1.電商小程序樣式電商小程序首頁一般是按照“圖片banner - 快捷按鈕 - 商品及分類”的…

Sql Server 2016數據庫生成帶數據的腳本

步驟:右鍵點擊對應數據庫->任務->生成腳本 在彈出的會話框中選擇需要的對象,點擊下一步,在設置和編寫腳本選項中,點開高級按鈕(如圖)選擇架構和數據點擊確定就可以了。 提醒:如果你在數據…

深入理解Scala的隱式轉換系統

原文鏈接:http://www.cnblogs.com/MOBIN/p/5351900.html----------------------------------------------摘要:通過隱式轉換,程序員可以在編寫Scala程序時故意漏掉一些信息,讓編譯器去嘗試在編譯期間自動推導出這些信息來&#xf…