2008-10-23 81 views
1

就我所知,Hibernate讓我們將實體和集合配置爲存儲在二級緩存中。Hibernate何時從二級緩存讀取以及從DB讀取?

Hibernate何時嘗試從二級緩存中讀取這些緩存的實體,以及它何時碰到數據庫?當調用Sesssion.get()加載實體並初始化代理(包括集合)時,Hibernate是否僅從第二級緩存讀取數據? Hibernate在執行HQL或Criteria-Queries時是否碰到過二級緩存?

例子?

+0

不hibernate保持統計有關? – 2008-10-28 16:49:01

回答

4

二級高速緩存僅包含實體的id,因此當通過id檢索實體(即隱式加載或解析代理)時,可以訪問二級高速緩存。任何其他查詢(hal,條件)都會繞過緩存並擊中數據庫 - 至少只要沒有使用查詢緩存即可。

2

(注:要回答這個類型的問題,最簡單的方法是打開show_sql,看看哪些查詢乙型流感嗜血桿菌產生。)

有時僅查詢返回的記錄的PK(例如,對於迭代查詢),然後接種Hib可以使用緩存。

當檢索鏈接對象緩存也可以使用。

我不能在這裏給你準確的規則。我也懷疑答案取決於所用方言的能力。