4

我正在尝试在我的项目中使用 ehcache.. 我在休眠配置文件中指定了以下属性 -

config.setProperty("hibernate.cache.provider_class","org.hibernate.cache.EhCacheProvider"); config.setProperty("hibernate.cache.provider_configuration_file_resource_path","ehcache.xml"); config.setProperty("hibernate.cache.use_second_level_cache","true"); config.setProperty("hibernate.cache.use_query_cache","true");

现在我仍然不确定结果是来自数据库还是缓存..

我环顾四周,发现 - Hibernate 二级缓存 - 打印结果 ,该人建议使用 HitCount/Misscount API

但是,当我尝试使用它时,命中计数和未命中计数总是返回 0 ...这是我的代码

String rName = "org.hibernate.cache.UpdateTimestampsCache"; 统计 stat = HibernateHelper.getInstance().getFactory().getStatistics(); long oldMissCount = stat.getSecondLevelCacheStatistics(rName).getMissCount(); long oldHitCount = stat.getSecondLevelCacheStatistics(rName).getHitCount(); UserDAO user = new UserDAO(); user.read(new Long(1)); long newMissCount = stat.getSecondLevelCacheStatistics(rName).getMissCount(); long newHitCount = stat.getSecondLevelCacheStatistics(rName).getHitCount();

if(oldHitCount+1 == newHitCount && oldMissCount+1 == newMissCount) { System.out.println("来自数据库"); } else if(oldHitCount+1 == newHitCount && oldMissCount == newMissCount) {
System.out.println("来自缓存"); }

如果我用错了,请告诉我.. 在这种情况下,rName(region Name) 应该是什么..

有没有其他方法可以确定二级缓存是否工作?

谢谢

4

1 回答 1

2

您需要启用统计信息收集:

config.setProperty("hibernate.generate_statistics", "true");
于 2011-01-02T12:36:42.043 回答