1. 程式人生 > >關於Hibernate的幾點回顧:get/load/SessionFactory/延遲載入

關於Hibernate的幾點回顧:get/load/SessionFactory/延遲載入

1,Hibernate中get()方法和load()方法的相同點與不同點?
    如果在快取中沒有找到物件,get()方法會直接訪問資料庫,並返回一個完全初始化
好的物件。load()方法如果在快取中沒有找到物件,則會返回一個代理物件,只有在物件
getId()之外的其他方法被呼叫時才會真正去訪問資料庫,這在某些場景下可以顯著提升
查詢效能。
    一句話概括就是:get()方法是“立即載入”,load()方法是“延遲載入”。

2,Hibernate的延遲載入是如何實現的?
    Hibernate的延遲載入,使用的是CGLIB的動態代理機制,也就是基於Class的動態代
理機制(區別於基於介面的動態代理機制)。Hibernate在使用到一個物件的時候,才會
去動態載入這個物件,這個機制和Spring載入bean的機制如出一轍。關於基於JDK的動態
代理和CGLIB的動態代理的區別, 可以參考我的之前的一篇博文:
《Java代理模式詳解及案例分析:靜態代理/動態代理》
http://blog.csdn.net/reggergdsg/article/details/53024827

3,Hibernate中的SessionFactory是執行緒安全的嗎?
    SessionFactory是執行緒安全的。SessionFactory是全域性的。如果一個應用只使用了一
種資料庫,那麼這個應用就只有一個SessionFactory。SessionFactory是全域性共享的。
《積雨輞川莊作·王維》
積雨空林煙火遲,蒸藜炊黍餉東菑。
漠漠水田飛白鷺,陰陰夏木囀黃鸝。
山中習靜觀朝槿,松下清齋折露葵。

野老與人爭度罷,海鷗何事更相疑。

相關推薦

關於Hibernate回顧get/load/SessionFactory/延遲載入

1,Hibernate中get()方法和load()方法的相同點與不同點?     如果在快取中沒有找到物件,get()方法會直接訪問資料庫,並返回一個完全初始化 好的物件。load()方法如果在快取中沒有找到物件,則會返回一個代理物件,只有在物件 getId()之外的其他

函式呼叫的說明

當在一個函式的執行期間呼叫另外一個函式時,在執行被調函式之前,系統需要完成三件事: 1. 將所有的實際引數,返回地址等資訊傳遞給被調函式儲存 2. 為被調函式的區域性變數(也包括形參)分配儲存空間 3. 將控制轉移到被調函式入口 從被調函式返回主調函式之前,系統也要完成三

做科研的體會如何多發 SCI

我剛剛開始做實驗的時候,別人怎麼說我就怎麼做,每天在實驗臺旁幹到深夜,以為這就是科研了。兩個月過去,突然發現自己還在原地踏步。那種感覺,只能用“沮喪”來形容。我開始置疑自己的行為和觀念。感覺有種習慣的力量在束縛著我。習慣於人云亦云,習慣於奉命行事,習慣於忙忙碌碌。我根本不是什麼研究生,只不過是一個廉價而又勤奮

ExtJs效能優化tab的資料延遲載入

今天碰到一個問題,當點選某一行資料,顯示詳情時,由於詳情又有四個子tab,每個子tab都是一個表格,有各種各樣的請求,當點選該行資料顯示詳情時,所有的資料同時載入,導致頁面卡頓,此時做ExtjS的效能優化是很重要的。通過研究,瞭解了一下ExtJs的效能優化和前端的效

【Java並發編程】之七使用synchronized獲取互斥鎖的說明

相互 strong enter 方法 虛擬 get tar 指令 自己 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17199201 在並發編程中,多線程同時並發訪問的資源叫做臨界資源,當多個線程同時

【Java並發編程】之十使用wait/notify/notifyAll實現線程間通信的重要說明

eight 就會 執行 其中 同步塊 lib public 對象 並發 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17225469 在Java中,可以通過配合調用Object對象的wait()方法和n

hibernate架構之session中getload方法的區別

r.java one 升級版 數據庫 apache appenders 進行 方法 main hibernate是一個用於連接數據庫的升級版JDBC,與一般JDBC不同的是,hibernate架構是通過hql進行查找,通過session建立連接。其工作原理是:將實例分為瞬時

關於nth-children 的總結

pos 冒號 col font com add p標簽 img body 1、這是w3school上的解釋:    2、自己的jq編程例子中    在24 行中是$("div :nth-child(1)").addClass("c4");, 運行效果:   

堆和棧的主要區別由以下

C/C++1、管理方式不同;2、空間大小不同;3、能否產生碎片不同;4、生長方向不同;5、分配方式不同;6、分配效率不同;管理方式:對於棧來講,是由編譯器自動管理,無需我們手工控制;對於堆來說,釋放工作由程序員控制,容易產生memory leak(內存泄漏)。空間大小:一般來講在32位系統下,堆內存可以達到4

阿裏資深架構師私下峰會了解這,人人皆是優秀架構師

java 源碼分析 分布式 高可用 高並發 前言: 最近有好多人問我說:“George,怎樣才能成為公司裏的前線主力架構師,我現在在公式已經幹了快五年了,現在還是一個默默無聞的程序員,我也通過很多種渠道來突破我現在瓶疾,但就是走不出來,技術也一直沒有突破上去,我真的是沒有辦法了,通過朋友推

Java併發程式設計(7)使用synchronized獲取互斥鎖的說明

在併發程式設計中,多執行緒同時併發訪問的資源叫做臨界資源,當多個執行緒同時訪問物件並要求操作相同資源時,分割了原子操作就有可能出現數據的不一致或資料不完整的情況,為避免這種情況的發生,我們會採取同步機制,以確保在某一時刻,方法內只允許有一個執行緒。 採用synchronized修飾符實現的同步機制叫做互斥鎖

Java並發編程(7)使用synchronized獲取互斥鎖的說明

防止 ron 互斥鎖 成員變量 線程 繼續 enter 交換 規範 在並發編程中,多線程同時並發訪問的資源叫做臨界資源,當多個線程同時訪問對象並要求操作相同資源時,分割了原子操作就有可能出現數據的不一致或數據不完整的情況,為避免這種情況的發生,我們會采取同步機制,以確保在某

hibernate中session的相關方法(save,persist get,load saveOrUpdate delete evict)

        Save()與persist()方法區別   1.save()方法 使一個臨時物件變為持久化物件,為物件分配id,在flush快取時,會發送一條insert語句,在save()方法之前id設定是無效的

工信部副部長羅文中國物聯網發展的四大特點和建議

9月10日,由工信部、科技部和江蘇省人民政府共同主辦的2017世界物聯網博覽會在無錫拉開帷幕,在主旨峰會上,工信部副部長羅文發表了演講。 羅文表示,發展物聯網是培育經濟發展新動能戰略舉措,當前中國經濟發展進入新常態,把握資訊科技發展趨勢,加快發展物聯網對促進經濟結構轉型升級培育發展新動能具

7連勝又怎樣?雅尼斯我只關心明天訓練

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

年薪500k大資料工程師所有程式設計師做到以下,年薪百萬不是夢

大資料是眼下非常時髦的技術名詞,與此同時自然也催生出了一些與大資料處理相關的職業,通過對資料的挖掘分析來影響企業的商業決策。 資料視覺化 這群人在國外被叫做資料科學家(Data Scientist),這個頭銜最早由D.J.Pati和Jeff Hammerbacher於2008年提出,他

PTA程式設計練習7-2 然後是(15 分)

題目: 有時候人們用四位數字表示一個時間,比如1106表示11點零6分。現在,你的程式要根據起始時間和流逝的時間計算出終止時間。 讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鐘數,計算當前時間經過那麼多分鐘後是幾點,結果也表

十年Java架構經驗總結尤為關鍵!

驀然回首自己做開發已經十年了,這十年中我獲得了很多,技術能力、培訓、出國、大公司的經歷,還有很多很好的朋友。 但再仔細一想,這十年中我至少浪費了五年時間,這五年可以足夠讓自己成長為一個優秀的程式設計師,可惜我錯過了,我用這五年時間和很多程式設計師一樣在困惑和迷茫中找不到出路

hibernate延遲載入(getload的區別)

在hibernate中我們知道如果要從資料庫中得到一個物件,通常有兩種方式,一種是通過session.get()方法,另一種就是通過session.load()方法,然後其實這兩種方法在獲得一個實體物件時是有區別的,在查詢效能上兩者是不同的。 一.load載入方式 當使用

hibernate 延遲載入 loadget方法

延遲載入 延遲載入: 當hibernate從資料庫中載入某個物件時,不載入關聯的物件,而只是生成了代理物件。使用session中的load的方法(在沒有改變lazy屬性,屬性值為true的情況下)獲取到的也是代理物件。 立即載入: 當Hibernat