JAVA高級(jí)編程之hibernate進(jìn)階學(xué)習(xí)

二級(jí)緩存

hibernate的session緩存

在事務(wù)級(jí)別進(jìn)行持久化數(shù)據(jù)的緩存操作砾脑。 當(dāng)然,也有可能分別為每個(gè)類(或集合)艾杏,配置集群韧衣、或 JVM 級(jí)別(SessionFactory 級(jí)別)的緩存。你甚至可以為之插入一個(gè)集群的緩存购桑。注意畅铭,緩存永遠(yuǎn)不知道其他應(yīng)用程序?qū)Τ志没瘋}(cāng)庫(kù)(數(shù)據(jù)庫(kù))可能進(jìn)行的修改 (即使可以將緩存數(shù)據(jù)設(shè)定為定期失效)。

  • session緩存
    session緩存是由一系列的Java集合構(gòu)成的勃蜘。當(dāng)一個(gè)對(duì)象被加入到Session緩存中硕噩,這個(gè)對(duì)象的引用就加入到了java的集合中,以后即使應(yīng)用程序中的引用變量不再引用該對(duì)象缭贡,只要Session緩存不被清空炉擅,這個(gè)對(duì)象一直處于生命周期中。

  • session作用
    1)減少訪問(wèn)數(shù)據(jù)庫(kù)的頻率阳惹。
    2)保證緩存中的對(duì)象與數(shù)據(jù)庫(kù)中的相關(guān)記錄保持同步谍失。

  • Session清理緩存的時(shí)機(jī):
    1)當(dāng)調(diào)用Transaction的commit()方法時(shí),commit()方法先清理緩存(前提是FlushMode.COMMIT/AUTO)穆端,然后再向數(shù)據(jù)庫(kù)提交事務(wù)袱贮。
    2)當(dāng)應(yīng)用程序調(diào)用Session的find()或者iterate()時(shí)仿便,如果緩存中的持久化對(duì)象
    的屬性發(fā)生了變化体啰,就會(huì)先清理緩存,以保證查詢結(jié)果能反映持久化對(duì)象的最新
    狀態(tài)嗽仪。
    3)當(dāng)應(yīng)用程序顯示調(diào)用Session的flush()方法的時(shí)候荒勇。

Hibernate對(duì)象的狀態(tài)

  • 1)瞬時(shí)態(tài)Transient:
    含義:由new操作符創(chuàng)建,且尚未與Hibernate Session關(guān)聯(lián)的對(duì)象闻坚。處于瞬時(shí)態(tài)的java對(duì)象成為臨時(shí)對(duì)象沽翔。
    特點(diǎn):不處于Session的緩存中,即不被任何一個(gè)Session實(shí)例關(guān)聯(lián)窿凤。
    在數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的記錄仅偎。

  • 2)持久態(tài)Persistent
    含義:已經(jīng)被持久化,加入到Session的緩存中雳殊,處于持久化狀態(tài)的java對(duì)象被稱為持久化對(duì)象橘沥。
    特點(diǎn):位于一個(gè)Session實(shí)例的緩存中。
    持久化對(duì)象在數(shù)據(jù)庫(kù)中有相應(yīng)的記錄夯秃,Session在清理緩存時(shí)座咆,會(huì)根據(jù)持久化對(duì)象的屬性變化來(lái)同步更新數(shù)據(jù)庫(kù)痢艺。
    當(dāng)一個(gè)持久化對(duì)象關(guān)聯(lián)一個(gè)臨時(shí)對(duì)象,在允許級(jí)聯(lián)保存的情況下介陶,Session在清理緩存的時(shí)候會(huì)把這個(gè)臨時(shí)對(duì)象也轉(zhuǎn)變?yōu)槌志没瘜?duì)象堤舒。

  • 3)脫管態(tài)Detached
    含義:已經(jīng)被持久化,但不再處于Session的緩存中哺呜,處于脫管狀態(tài)的java對(duì)象稱為游離對(duì)象舌缤。
    特點(diǎn):不再位于Session的緩存中,即不被Session關(guān)聯(lián)某残。
    游離對(duì)象是由持久化對(duì)象轉(zhuǎn)變過(guò)來(lái)的友驮,因此在數(shù)據(jù)庫(kù)存在與之對(duì)應(yīng)的記錄(前提是沒(méi)有其他程序刪除了這條記錄)。

  • hibernate對(duì)象狀態(tài)裝換圖如下圖所示:

Session API :

Session接口是Hibernate向應(yīng)用程序提供的操縱數(shù)據(jù)庫(kù)的最主要的接口驾锰,它提供了基本的保存卸留,更新,刪除和查詢的方法椭豫。

  • save():把一個(gè)臨時(shí)對(duì)象加入到緩存中耻瑟,使它變成持久化對(duì)象

    如果在save()方法之后,又修改了持久化對(duì)象的屬性赏酥,會(huì)使得Session在清理緩存的時(shí)候額外執(zhí)行SQL update語(yǔ)句喳整。

    注意:save()方法是用來(lái)持久化一個(gè)臨時(shí)對(duì)象的!

  • update():把Object對(duì)象重新加入到Session緩存中裸扶,使之變?yōu)槌志没瘜?duì)象框都。

    計(jì)劃一條update語(yǔ)句,只有在清理緩存的時(shí)候才會(huì)執(zhí)行呵晨,并且在執(zhí)行的時(shí)候才會(huì)把參數(shù)對(duì)象中的屬性值組裝到update語(yǔ)句中魏保。

    注意:update()是將一個(gè)游離對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象的。

  • saveOrUpdate():同時(shí)包含了save()與update()方法的功能摸屠,如果傳入的參數(shù)是臨時(shí)對(duì)象谓罗,調(diào)用save方法,如果參入?yún)?shù)是游離對(duì)象季二,調(diào)用update()方法檩咱,如果傳入的是持久化對(duì)象,直接返回胯舷。

  • load()/get():都會(huì)根據(jù)給定的OID從數(shù)據(jù)庫(kù)中加載一個(gè)持久化對(duì)象刻蚯,區(qū)別在于,當(dāng)數(shù)據(jù)庫(kù)中不存在與OID對(duì)應(yīng)的記錄時(shí)桑嘶,load()方法會(huì)拋出ObjectNotFoundException異常炊汹,而get()方法返回null。

  • delete():于從數(shù)據(jù)庫(kù)中刪除與參數(shù)對(duì)象對(duì)應(yīng)的記錄不翩,如果傳入的參數(shù)是持久化對(duì)象兵扬,Session就計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句麻裳,如果傳入的參數(shù)是游離對(duì)象,先使游離對(duì)象被Session關(guān)聯(lián)器钟,使它變?yōu)槌志没瘜?duì)象津坑,然后計(jì)劃一個(gè)delete語(yǔ)句,在清理緩存的時(shí)候執(zhí)行傲霸。

  • evict():從緩存中清除參數(shù)指定的持久化對(duì)象疆瑰。

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

推薦hibernate的QBH hql查詢: http://www.reibang.com/p/21bcb31ea80e
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昙啄,一起剝皮案震驚了整個(gè)濱河市穆役,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梳凛,老刑警劉巖耿币,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異韧拒,居然都是意外死亡淹接,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)叛溢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)塑悼,“玉大人,你說(shuō)我怎么就攤上這事楷掉∠崴猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵烹植,是天一觀的道長(zhǎng)斑鸦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刊橘,這世上最難降的妖魔是什么鄙才? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任颂鸿,我火速辦了婚禮促绵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘴纺。我一直安慰自己败晴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布栽渴。 她就那樣靜靜地躺著尖坤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闲擦。 梳的紋絲不亂的頭發(fā)上慢味,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天场梆,我揣著相機(jī)與錄音,去河邊找鬼纯路。 笑死或油,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驰唬。 我是一名探鬼主播顶岸,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叫编!你這毒婦竟也來(lái)了辖佣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搓逾,失蹤者是張志新(化名)和其女友劉穎卷谈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體霞篡,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雏搂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寇损。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸郑。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矛市,靈堂內(nèi)的尸體忽然破棺而出芙沥,到底是詐尸還是另有隱情,我是刑警寧澤浊吏,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布而昨,位于F島的核電站,受9級(jí)特大地震影響找田,放射性物質(zhì)發(fā)生泄漏歌憨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一墩衙、第九天 我趴在偏房一處隱蔽的房頂上張望务嫡。 院中可真熱鬧,春花似錦漆改、人聲如沸心铃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)去扣。三九已至,卻和暖如春樊破,著一層夾襖步出監(jiān)牢的瞬間愉棱,已是汗流浹背唆铐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奔滑,地道東北人或链。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像档押,于是被迫代替她去往敵國(guó)和親澳盐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Hibernate: 一個(gè)持久化框架 一個(gè)ORM框架 加載:根據(jù)特定的OID,把一個(gè)對(duì)象從數(shù)據(jù)庫(kù)加載到內(nèi)存中OID...
    JHMichael閱讀 1,979評(píng)論 0 27
  • 這部分主要是開(kāi)源Java EE框架方面的內(nèi)容令宿,包括Hibernate叼耙、MyBatis、Spring粒没、Spring ...
    雜貨鋪老板閱讀 1,391評(píng)論 0 2
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4493116...
    王帥199207閱讀 2,403評(píng)論 0 19
  • Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架筛婉,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將POJO與數(shù)據(jù)庫(kù)...
    蘭緣小妖閱讀 1,213評(píng)論 1 18
  • 他說(shuō) 煙雨早已散去癞松,太陽(yáng)還在沉睡 他說(shuō) 月亮將暖冬投到了樹(shù)枝上 他說(shuō) 一路海棠爽撒,只剩梨花還在飄散 他說(shuō) 鐘聲敲了二...
    布魯克林的群鴉閱讀 198評(píng)論 0 1