我想知道如何加載和獲得第一級高速緩存。休眠第一級高速緩存
如果我在同一個會話中有一個select查詢,首先使用getmethod進行檢索,然後使用load方法。第二個加載方法會使用查詢緩存還是會對屬性的檢索進行新的查詢?
我想知道如何加載和獲得第一級高速緩存。休眠第一級高速緩存
如果我在同一個會話中有一個select查詢,首先使用getmethod進行檢索,然後使用load方法。第二個加載方法會使用查詢緩存還是會對屬性的檢索進行新的查詢?
緩存是主要適用於:
session.get
session.load
如果沒有命中,則get
執行查詢,load
創建代理。
執行任何類型的查詢(HQL,條件)時,查詢將轉換爲SQL並在數據庫上執行。如果在緩存中找到結果對象,則查詢將返回它們。
我是新手來休眠。因此,爲了理解hibernate緩存策略,我在get處設置了一個斷點,然後跟隨了調用堆棧。
在文件StatefulPersistanceContext.java中, entitiesByKey,它充當會話級緩存。當你打電話給get()它首先檢查會話級別緩存,如果它未命中,那麼檢查第二級緩存(如果它被設置爲用於該實體)否則它會回退到數據庫。見doLoad()功能和調用loadFromSessionCache(),loadFromSecondLevelCache()和loadFromDatasource()在DefaultLoadEventListners.java文件。
一旦從數據庫中檢索行,它也會填充會話級別緩存。因此,您對get()的後續調用將從會話級高速緩存本身解析。
默認情況下啓用一級緩存,我們不需要做任何事情來實現它,實際上我們甚至不能從那裏禁用它。第一級緩存也被稱爲會話級緩存,這意味着它僅適用於會話,以防單個會話中執行兩次或更多次相同的查詢,它僅從第一個請求獲取數據,並提供相同的數據從緩存中爲所有即將到來的類似請求
更多細節:http://www.beingjavaguys.com/2014/11/how-first-level-caching-works-in.html
一級緩存:這是在事務級,默認情況下在Hibernate中啓用。第一級的緩存與會話相關聯。如果在同一會話中多次執行相同的查詢,則與查詢關聯的數據將被緩存。
http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32011