Search code examples
hibernatecachingsecond-level-cache

Hibernate second level cache - print result


I defined a second level cache in my application using @Cache annotation

I am using findById query, as the following:

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

Where Company is the object that I get from the DB.

How can I check if the Company object came from the DB or from the cache?


Solution

  • Try HitCount and/or MissCount API.

    Something like this.....

    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");
    }