2013-04-29 58 views
3

我對Hibernate二級緩存有些疑惑。我讀過的內容是,Hibernate二級緩存僅存儲ID,並且只有在通過ID查詢進行查找的情況下才有用。爲什麼hibernate不使用緩存加入連接完成的兩個表的ID是否被緩存? 我運行了一個程序來測試這個,發現啓用緩存後,連接查詢需要更多時間。爲什麼不加入查詢命中Hibernate二級緩存?

謝謝!

回答

2

第二級緩存緩存實體的狀態,由ID索引。但它是一個緩存。它只存儲的一些的實體(最近使用,通常)。

因此,即使Hibernate可以解析查詢,分析它,注意它只包含實體ID的限制,它不能使用它的緩存繞過數據庫,因爲它不知道是否所有的實體將由數據庫返回的緩存中或不存在。所以它不會這麼做,只需執行查詢,就像其他任何查詢一樣。

你可以做的是配置查詢緩存。這將使它緩存先前執行的查詢返回的實體的ID。在這種情況下,相同查詢的第二次執行(具有相同參數)將被繞過,ID將從查詢緩存中返回,並且狀態將從第二級緩存中加載。

+0

非常感謝!!我正在查看連接查詢會有不同參數的場景。在此緩存中,據我瞭解,不會有任何幫助嗎? – Tazo 2013-04-30 06:45:33

+0

否。緩存服務於它已知的內容。 – 2013-04-30 06:57:55

相關問題