Hibernate二级缓存 - 打印结果

Rik*_*iki 4 caching hibernate second-level-cache

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

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

  long id = 4;    
        Company cmp = companyDAO.findById(id);
Run Code Online (Sandbox Code Playgroud)

公司是我从DB获得的对象.

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

Pas*_*ent 7

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

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

请参见第3.5章日志记录.


dir*_*ira 4

尝试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");
}
Run Code Online (Sandbox Code Playgroud)