hibernate之session接口

原文鏈接http://zhhll.icu/2020/12/04/%E6%A1%86%E6%9E%B6/hibernate/session%E6%8E%A5%E5%8F%A3/

session接口

Session接口是hibernate向應(yīng)用程序提供的操縱數(shù)據(jù)庫(kù)的最主要的接口眷唉,提供了保存肝陪、更新狼讨、刪除和加載Java對(duì)象的方法犬耻。

session具有一個(gè)緩存,位于緩存中的對(duì)象成為持久化對(duì)象排苍,和數(shù)據(jù)庫(kù)中的相關(guān)記錄對(duì)應(yīng)沦寂。session能夠在某些時(shí)間點(diǎn),按照緩存中對(duì)象的變化來(lái)執(zhí)行相關(guān)的SQL語(yǔ)句淘衙,來(lái)同步更新數(shù)據(jù)庫(kù)传藏,這一過(guò)程稱為刷新緩存(flush)。

hibernate把對(duì)象分為4種狀態(tài)彤守,持久化狀態(tài)毯侦,臨時(shí)狀態(tài),游離狀態(tài)具垫,刪除狀態(tài)侈离。session的特定方法可以使對(duì)象進(jìn)行狀態(tài)轉(zhuǎn)換

session緩存

session實(shí)例沒有結(jié)束生命周期,且沒有清理緩存筝蚕,則存放在session緩存中的對(duì)象也不會(huì)結(jié)束生命周期卦碾,session緩存可以減少訪問(wèn)數(shù)據(jù)庫(kù)的頻率。

操作session緩存

flush方法

緩存中對(duì)象同步到數(shù)據(jù)庫(kù)(會(huì)插入或更新數(shù)據(jù)庫(kù))起宽,使數(shù)據(jù)庫(kù)中的狀態(tài)與緩存中一致

注意:

session在以下情況下會(huì)刷新緩存

  • hibernate在事務(wù)提交之前會(huì)執(zhí)行flush()方法洲胖,然后再向數(shù)據(jù)庫(kù)提交事務(wù)

  • 顯示調(diào)用session.flush()方法

  • 在執(zhí)行HQL或者QBC查詢,會(huì)先進(jìn)行flush()操作坯沪,以得到數(shù)據(jù)表最新的記錄

refresh方法

將數(shù)據(jù)庫(kù)同步到緩存中(會(huì)查詢數(shù)據(jù)庫(kù))宾濒,使緩存中的狀態(tài)與數(shù)據(jù)庫(kù)一致

session.refresh(); 
clear方法

清理緩存,可以將session中的緩存清除

session.clear();

四種狀態(tài)的轉(zhuǎn)換

臨時(shí)狀態(tài)(Transient)

  • 在使用代理主鍵的情況下屏箍,OID通常為null
  • 不處于session緩存中
  • 在數(shù)據(jù)庫(kù)中也沒有對(duì)應(yīng)的記錄

持久化狀態(tài)(Persist)

  • OID不為null
  • 位于session緩存中
  • 若在數(shù)據(jù)庫(kù)中已經(jīng)有和其對(duì)應(yīng)的記錄,持久化對(duì)象和數(shù)據(jù)庫(kù)中的相關(guān)記錄對(duì)應(yīng)
  • session在flush緩存時(shí)橘忱,會(huì)根據(jù)持久化對(duì)象的屬性變化赴魁,來(lái)同步數(shù)據(jù)庫(kù)
  • 在同一個(gè)session實(shí)例的緩存中,數(shù)據(jù)庫(kù)表中每條記錄只對(duì)應(yīng)唯一的持久化對(duì)象
  • 持久化對(duì)象的id不可以被修改钝诚,因?yàn)閔ibernate是根據(jù)id去進(jìn)行比較的

刪除狀態(tài)(Removed)

  • 在數(shù)據(jù)庫(kù)中沒有和其OID對(duì)應(yīng)的記錄
  • 不再處于session緩存中

游離狀態(tài)(Detached)

  • OID不為null
  • 不再處于session緩存中
  • 一般情況下颖御,游離對(duì)象是由持久化對(duì)象轉(zhuǎn)變過(guò)來(lái)的,數(shù)據(jù)庫(kù)中可能還存在它對(duì)應(yīng)的記錄
在這里插入圖片描述

save方法和persist方法的區(qū)別

在調(diào)用persist()方法時(shí)如果存在id,則會(huì)拋出異常潘拱,而save方法則可以正常執(zhí)行

org.hibernate.PersistentObjectException: detached entity passed to persist

get方法和load方法的區(qū)別

  • 執(zhí)行g(shù)et方法會(huì)立即加載對(duì)象疹鳄,執(zhí)行l(wèi)oad方法若不使用該對(duì)象,則不會(huì)立即查詢芦岂,而是返回一個(gè)代理對(duì)象(延時(shí)加載)

  • 若數(shù)據(jù)表中沒有對(duì)應(yīng)的記錄瘪弓,get方法返回null,load方法拋出異常

    org.hibernate.ObjectNotFoundException: No row with the given identifier exists
    
  • load方法可能會(huì)拋出懶加載異常

    org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    

注意:在session緩存中不能夠有兩個(gè)相同OID的對(duì)象禽最,否則會(huì)報(bào)異常

public static void testOid(Session session){
  User user = (User) session.get(User.class,1);
  System.out.println(user);
  User user1  = new User();
  user1.setId(1);
  user1.setName("王五");
  session.saveOrUpdate(user1);
}

org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session

evict方法

從session緩存中將指定的持久化對(duì)象移除

hibernate獲取原生JDBC連接進(jìn)行操作

可以使用doWork或者doReturnWork來(lái)使用原生JDBC操作數(shù)據(jù)

session.doWork(new Work() {
  @Override
  public void execute(Connection connection) throws SQLException {

  }
});

session.doReturningWork(new ReturningWork<Object>() {
  @Override
  public Object execute(Connection connection) throws SQLException {
    return null;
  }
});

由于本身的博客百度沒有收錄腺怯,博客地址http://zhhll.icu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市川无,隨后出現(xiàn)的幾起案子呛占,更是在濱河造成了極大的恐慌,老刑警劉巖懦趋,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晾虑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仅叫,警方通過(guò)查閱死者的電腦和手機(jī)帜篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惑芭,“玉大人坠狡,你說(shuō)我怎么就攤上這事∷旄” “怎么了逃沿?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)幻锁。 經(jīng)常有香客問(wèn)我凯亮,道長(zhǎng),這世上最難降的妖魔是什么哄尔? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任假消,我火速辦了婚禮,結(jié)果婚禮上岭接,老公的妹妹穿的比我還像新娘富拗。我一直安慰自己,他們只是感情好鸣戴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布啃沪。 她就那樣靜靜地躺著,像睡著了一般窄锅。 火紅的嫁衣襯著肌膚如雪创千。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音追驴,去河邊找鬼械哟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛殿雪,可吹牛的內(nèi)容都是我干的暇咆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼冠摄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼糯崎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起河泳,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沃呢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拆挥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄霜,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年纸兔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惰瓜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汉矿,死狀恐怖崎坊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洲拇,我是刑警寧澤奈揍,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站赋续,受9級(jí)特大地震影響男翰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纽乱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一蛾绎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸦列,春花似錦租冠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至应民,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诲锹。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工繁仁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人归园。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓黄虱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庸诱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捻浦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 1.對(duì)象的幾種狀態(tài) 在所有之前,說(shuō)明一下桥爽,對(duì)于hibernate朱灿,它的對(duì)象有三種狀態(tài),transient钠四、pers...
    文先生_1357閱讀 494評(píng)論 0 0
  • session接口是hibernate重要的組成盗扒,session接口的實(shí)現(xiàn)中包含一系列java集合,這些集合構(gòu)成...
    文先生_1357閱讀 192評(píng)論 0 0
  • 一缀去、首先新建一個(gè)項(xiàng)目 其他的與上一次的項(xiàng)目差不多相同侣灶,只不過(guò)date的改為java.util.date的 測(cè)試類中...
    leeqico閱讀 538評(píng)論 0 1
  • 一、Session中方法 1缕碎、事務(wù)相關(guān)的方法 Transactionsession.beginTransactio...
    紫荊秋雪_文閱讀 1,200評(píng)論 0 0
  • Session接口是Hibernate向應(yīng)用程序提供的操縱數(shù)據(jù)庫(kù)的主要接口褥影,它提供了基本的保存,更新咏雌,刪除和加載J...
    BlueSkyBlue閱讀 224評(píng)論 0 0