我使用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;
}
這裏是我如何配置我的休眠二級緩存...
<!-- 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>
任何想法爲什麼我的二級緩存沒有顯示任何命中?謝謝 - 戴夫
第一條評論:有一個更好的方法從'EntityManager'獲取'Statistics'對象,不需要將其轉換爲Hibernate內部對象。看到我的代碼在你的另一個問題:http://stackoverflow.com/questions/14106575/how-do-i-access-hibernate-statistics-from-an-entitymanager –
第二評論:你看到的命中數對應於從'org.hibernate.stat。*'調試消息,即Hibernate(或可能Ehcache)調試消息揭示爲什麼沒有緩存命中?有時會有緩存命中,但它們被認爲已過期。 –
我沒有看到任何帶有「org.hibernate.stat」的調試消息。我問的是爲什麼不生成二級緩存命中?我得到同一個實體兩次。 – Dave