1

我正在使用 Spring 3.1.1.RELEASE、Hibernate 4.1.5.Final 和 JUnit 4.8.1。我想测试我的二级缓存是否被正确使用,但不确定我是否做得对。以下 JUnit 代码在最后一个断言上失败……</p>

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

以下是我配置域对象的方式……</p>

@Entity
@Table(name = "cb_country")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Country implements Serializable
{
    …
}

这是我的 DAO……</p>

@Override
public Country findById(String id)
{
    Country ret = null;
    if (id != null)
    {
        ret = entityManager.find(Country.class, id);
    }   // if
    return ret;
}

以下是我配置 Hibernate 二级缓存的方式……</p>

    <!--  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>

任何想法为什么我的二级缓存没有指示任何命中?谢谢 - 戴夫

4

2 回答 2

2

SecondLevelCacheHitCount等于零,因为在会话期间(如在您的代码中)休眠使用第一级缓存并从中加载实体。没有使用二级缓存,所以 secondLevelCacheHitCount 没有改变。

于 2013-12-20T14:18:32.277 回答
0

现在有点老了,但是如果您将日志记录设置为像Marcel Stör所说的那样显示休眠统计信息 - 例如

log4j.logger.org.hibernate.stat=TRACE

注意这样的事情

调试 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,我的缓存测试失败),所以我不知道为什么它不是t 在版本 4.1.5 中为您启用,但要确保统计记录正常工作。

于 2013-10-04T01:28:47.020 回答