我正在使用Spring 3.1.1.RELEASE,Hibernate 4.1.5.Final和JUnit 4.8.1。我想测试我的二级缓存是否正确使用,但不确定我是否正确使用它。以下JUnit代码在最后一个断言中失败...
private Statistics m_stats;
@Before
public void setup()
{
m_stats = ((org.hibernate.internal.SessionImpl) m_entityManager.getDelegate()).getSessionFactory().getStatistics();
} // setup
@Test
public void testGenerateStats()
{
final String countryId = m_testProps.getProperty("test.country.id");
final Country country = m_countryDao.findById(countryId);
Assert.assertNotNull(country);
final Country country2 = m_countryDao.findById(countryId);
m_countryDao.findById(countryId);
Assert.assertTrue(m_stats.getSecondLevelCacheHitCount() > 0);
}
以下是我配置域名对象的方法......
@Entity
@Table(name = "cb_country")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Country implements Serializable
{
…
}
这是我的DAO ......
@Override
public Country findById(String id)
{
Country ret = null;
if (id != null)
{
ret = entityManager.find(Country.class, id);
} // if
return ret;
}
以下是我配置Hibernate二级缓存的方法......
<!-- Caching -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- Collect stats, this is for testing if the cache is working -->
<property name="hibernate.generate_statistics">true</property>
为什么我的二级缓存没有显示任何点击的任何想法?谢谢 - 戴夫
答案 0 :(得分:2)
SecondLevelCacheHitCount
等于零,因为在会话期间(如在代码中),hibernate使用第一级缓存并从中加载实体。未使用二级缓存,因此secondLevelCacheHitCount未更改。
答案 1 :(得分:0)
现在有点旧了,但是如果你设置你的日志记录来显示像Marcel Stör那样的hibernate统计数据 - 例如
log4j.logger.org.hibernate.stat=TRACE
注意这样的事情
DEBUG 2013-10-04 11:09:20,456 [main] org.hibernate.stat.internal.StatisticsInitiator:初始化的统计数据[enabled = false]
我看到你有hibernate.generate_statistics=true
但是,为了在我的测试中启用统计数据,我使用了:
m_stats.setStatisticsEnabled(true);
我有一个测试,我认为这个版本在4.1.7版中默认启用,但在那之后的某个时候发生了更改(我升级到4.1.12,我的缓存测试失败了),所以我不确定为什么它在版本4.1.5中没有启用,但是让stats日志记录确实可以确定。