Hibernate的查詢快取

2021-06-28 13:27:15 字數 956 閱讀 9486

在hibernate的使用中,大家都很熟悉一級快取和二級快取的使用,在hibernate中還有另一種快取,查詢快取。查詢快取是依賴於二級快取的。

一.查詢快取的執行方式

hibernate的查詢快取是主要是針對普通屬性結果集的快取, 而對於實體物件的結果集只快取id。在一級快取,二級快取和查詢快取都開啟的情況下作查詢操作時這樣的:查詢普通屬性,會先到查詢快取中取,如果沒有,則查詢資料庫;查詢實體,會先到查詢快取中取id,如果有,則根據id到快取(一級/二級)中取實體,如果快取中取不到實體,再查詢資料庫。

和一級/二級快取不同,查詢快取的生命週期 ,是不確定的,當前關聯的表發生改變時,查詢快取的生命週期結束。如果要手工清理可呼叫evictqueries()方法。

二.使用查詢快取

查詢快取的配置和使用也是很簡單的:

1>查詢快取的啟用不但要在配置檔案中進行配置

true

2>還要在程式中顯示的進行啟用

query.setcacheable(true);

三.查詢快取對二級快取的影響

1.如果不設定'查詢快取',那麼hibernate只會快取使用load或get方法獲得的單個持久化物件,如果想快取使用 findall()、list()、createcriteria()、createquery()等方法獲得的資料結果集的話,就需要使用查詢快取

2.對於儲存在二級快取的實體物件,必須呼叫hibernate的load或get方法時,才從二級快取裡查詢,其他如find方法是不從二級快取裡查詢的,會從資料庫查詢。

三.技術要點

1.查詢快取依賴於二級快取。

2.針對普通屬性結果集的快取

3.對是實體物件的結果集,只快取id

4.查詢快取與session無關,即在乙個session上做了查詢快取,那麼在另乙個session中可以取到查詢快取的內容,不再發出sql

5.要注意區別:一級快取與二級快取是快取實體,而查詢快取是快取普通屬性.

hibernate查詢快取

自 查詢快取的生命週期,當查詢關聯的表發生改變,那麼查詢快取的生命週期結束 delete update modify 啟用查詢快取 1.hibernate.cfg.xml中配置 true 2.中用setcacheable true 手動啟用 只對list 方法起作用 預設情況下list 每次都會發s...

hibernate的查詢快取

在hibernate的使用中,大家多數時間都在討論一級快取和二級快取,而往往忽略了查詢快取。其實hibernate的查詢快取在使用過程中也起著同樣重要的作用。hibernate的查詢快取是主要是針對普通屬性結果集的快取,而對於實體物件的結果集只快取id。在一級快取,二級快取和查詢快取都開啟的情況下作...

hibernate的查詢快取

在hibernate的使用中,大家多數時間都在討論一級快取和二級快取,而往往忽略了查詢快取。其實hibernate的查詢快取在使用過程中也起著同樣重要的作用。hibernate的查詢快取是主要是針對普通屬性結果集的快取,而對於實體物件的結果集只快取id。在一級快取,二級快取和查詢快取都開啟的情況下作...