2010-07-01 65 views
4

我在應用程序定義的二級緩存使用@Cache註釋Hibernate的二級緩存 - 打印結果

我使用findById查詢,如下:

long id = 4;  
     Company cmp = companyDAO.findById(id); 

凡公司爲對象,我從數據庫中獲得。

如何檢查公司對象是來自數據庫還是來自緩存?

回答

2

嘗試HitCount and/or MissCount API。

像這樣的東西.....

int oldMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount(); 
int oldHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount(); 

long id = 4;  
Company cmp = companyDAO.findById(id); 

int newMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount(); 
int newHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount(); 
if(oldHitCount+1 == newHitCount && oldMissCount+1 == newMissCount) { 
    logger.debug("came from DB"); 
    } else if(oldHitCount+1 == newHitCount && oldMissCount == newMissCount) { 
    logger.debug("came from cache"); 
} 
+0

我試過這段代碼,但是misscount和hit count總是返回0 ...我可以做出的任何錯誤?? – Anand 2011-01-02 03:12:28

+0

@Anand你確定你已經啓用了hibernate.cache.use_second_level_cache,hibernate.cache.use_query_cache,hibernate.generate_statistics? http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional – dira 2011-01-04 05:51:36

+0

如何找出實體的區域名稱(rName)? – Sriram 2015-06-26 11:26:23

1

打開緩存記錄。

6

如何檢查公司對象是來自數據庫還是來自緩存?

Hibernate使用特定類別記錄所有二級緩存活動。相關類別爲org.hibernate.cache,只需在配置日誌框架時啓用調試即可。

請參閱Chapter 3.5 Logging

+0

我不想在日誌中運行它 - 我想在一個測試頁,將打印到屏幕上運行它: 公司緩存/不緩存 – Dejell 2010-07-01 13:50:18

+0

@Odelya:也許吧,但你不是OP)只要發佈一個更具體的問題,如果這個不能滿足您的需求。 – 2010-07-01 14:11:11

+0

嗨! 我與Riki在同一個團隊中。我不能改變她的問題:( 她寫了需要檢查系統中的對象是否被緩存的頁面 但我們不想使用日誌 - 我們想打印它的視圖(我們使用JSF) – Dejell 2010-07-01 17:36:12

相關問題