Hibernate 二級快取疑難點

2022-03-10 05:47:56 字數 1536 閱讀 3173

一級快取:快取實體

二級快取:快取實體

hibernate查詢快取快取的是查詢出來的實體的部分屬性結果集和實體的id(注意這裡不是實體)。

hibernate查詢快取:對list起作用。但是hibernate查詢快取對iterator不起作用,只對list起作用。

iterator不考慮快取,必會執行,且僅查詢出實體id的集合。

iterator iter = session.createquery("from gouser").iterate();

for(;iter.hasnext();)

說明:iterator這種方式會得到實體的id集合,查詢實體的具體屬性時會重新向資料庫發出請求。

如果開啟二級快取,迴圈遍歷時二級快取會將實體儲存。

關閉二級快取,開啟查詢快取的情況下

session session =sf.opensession();

session.begintransaction();

list

list = (list) session.createquery("from user")

.setcacheable(

true

).list();

for(user u : list)

session.gettransaction().commit();

session.close();

system.out.println("-----------------分割線------------------");

session session2 =sf.opensession();

session2.begintransaction();

list

list2 = (list) session2.createquery("from user")

.setcacheable(

true

).list();

for(user u : list2)

session2.gettransaction().commit();

session2.close();

執行結果:

說明:關閉二級快取,開啟查詢快取的情況下,第一次list查詢,將所有實體的屬性資訊查詢出來,只執行了一條語句,然後僅儲存了實體id的列表,所以第二次查詢時,由查詢快取中的id去資料庫中取實體資料。

二級快取、查詢快取都開啟的情況下

**如上例

執行結果:

說明:二級快取和查詢快取都開啟的情況下,由於查詢語句相同,則從查詢快取中查詢對應的id集合,然後根據id再從二級快取中查詢對應的實體,所以只執行一次資料庫操作。

hibernate二級快取

cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...

hibernate 二級快取

session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...

Hibernate二級快取

hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...