5

我使用 @Cache 注释在我的应用程序中定义了二级缓存

我正在使用 findById 查询,如下所示:

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

其中 Company 是我从数据库中获得的对象。

如何检查 Company 对象是来自数据库还是来自缓存?

4

3 回答 3

8

如何检查 Company 对象是来自数据库还是来自缓存?

Hibernate 使用特定的类别来记录所有二级缓存活动。相关类别是,只需在日志框架的配置中为其org.hibernate.cache启用调试即可。

请参阅第 3.5 章记录

于 2010-07-01T12:27:12.293 回答
3

试试HitCount 和/或 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");
}
于 2010-07-01T09:26:30.237 回答
0

打开缓存日志记录。

于 2010-07-01T11:09:04.100 回答