2010-05-15 59 views
4

在我的grails應用程序中,我想顯示所有區域的第二級緩存的所有當前條目如何從第二級查詢緩存中獲取條目?

我的代碼如下:只要

然而一切正常的區域名稱org.hibernate.cache.StandardQueryCache(用於Query Cache區域)。在這種情況下,拋出一個異常:

java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to org.hibernate.cache.CacheKey 

有谷歌搜索的時候,我並沒有找到有關任何線索如何顯示緩存的查詢結果條目集列表與地區StandardQueryCacheUpdateTimestampsCache有關。

你能幫我找到解決方案嗎?

+0

您是否嘗試過使用最新的休眠版本?對於聽起來非常相似的問題有一個錯誤修復 - http://opensource.atlassian.com/projects/hibernate/browse/HHH-2021,版本3.2.7/3.3.0 – mdma 2010-05-15 23:57:10

+0

是的。我與版本3.3.2。 – fabien7474 2010-05-16 09:46:24

回答

3

這是相當複雜的,但這應該讓你更進一步。您可以通過SessionFactory的訪問查詢緩存,所以假設你有權訪問(例如,通過「高清SessionFactory的」),那麼你可以得到一個底層緩存是這樣的:

def cache = sessionFactory.queryCache 
def realCache = [email protected] 
def keys = realCache.keys 
for (key in keys) { 
    def value = realCache.get(key).value 
    // do something with the value 
} 

注意,值將是長值列表。我不確定第一個表示的是什麼(這是一個很大的值,例如5219682970079232),但剩下的就是緩存的域類實例的ID。

+0

Thx伯特再次!你是一個天才。 – fabien7474 2010-05-30 15:44:49

+0

@BurtBeckwith在java中有這樣的解決方法嗎?我嘗試了'sessionFactory.queryCache',但它沒有奏效。 – 2017-08-04 10:10:38

相關問題