一級快取:快取實體
二級快取:快取實體
hibernate查詢快取快取的是查詢出來的實體的部分屬性結果集和實體的id(注意這裡不是實體)。
hibernate查詢快取:對list起作用。但是hibernate查詢快取對iterator不起作用,只對list起作用。
iterator不考慮快取,必會執行,且僅查詢出實體id的集合。
iterator iter = session.createquery("from gouser").iterate();說明:iterator這種方式會得到實體的id集合,查詢實體的具體屬性時會重新向資料庫發出請求。for(;iter.hasnext();)
如果開啟二級快取,迴圈遍歷時二級快取會將實體儲存。
關閉二級快取,開啟查詢快取的情況下
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級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...