【发布时间】:2013-11-23 15:46:05
【问题描述】:
编辑:我应该声明我已经研究了几天了 - 关于“如何使用 Hibernate 配置 ehcache”的信息大量但它们大多不涉及使用 JPA 和注释——它们要么是指纯 Hibernate,要么是通过 XML 配置。 (只是想明确一点,我已经在互联网上讨论过这个问题。)我正在使用 JPA 和注释,所以这些配置指南中的大多数都引用了我的应用程序中没有的文件(比如 hbm.xml文件)。
我有一个使用 Hibernate 3.6.10.FINAL、Spring Data 1.3.2.RELEASE 和 Spring 版本 3.2.1.RELEASE 的应用程序。我试图让二级缓存在休眠状态下工作。根据文档,我可以简单地通过包含以下依赖项和配置来做到这一点:
(POM.XML)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
(PERSISTENCE.XML)
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.generate_statistics" value="true" />
我已经使用 javax.persistence.Cacheable 注释对我的一个实体类进行了注释,并尝试在 JUnit 测试中查看统计信息:
public void cacheTest() {
RandomDataGenerator randomData = new RandomDataGenerator();
for (int i = 0; i < 10; i++) {
AppMaster master = masterService.findOne(randomData.nextLong(1, 10));
logger.debug(String.format("Read one record back = %1$d, %2$s", master.getApplicationId(), master.getApContact()),AppMasterServiceTest.class);
// Get statistics from hibernate session
Session session = (Session)masterService.getEntityManager().getDelegate();
Statistics statistics = session.getSessionFactory().getStatistics();
logger.debug(String.format("Second level stats = %1$d, %2$d, %3$d",
statistics.getSecondLevelCachePutCount(),
statistics.getSecondLevelCacheHitCount(),
statistics.getSecondLevelCacheMissCount()), AppMasterServiceTest.class);
}
但统计数据似乎总是为零。
2013-11-11 11:20:33,908 DEBUG [main] test.service.AppMasterServiceTest - Second level stats = 0, 0, 0
谁能帮我诊断一下?
【问题讨论】:
-
从您发布的内容看来,您没有在 persistence.xml 中设置 ENABLE_SELECTIVE。查看docs.oracle.com/javaee/6/api/javax/persistence/Cacheable.html 上的文档并查看此相关问题*.com/questions/3663979/…
-
您似乎是正确的,在persistence.xml 中添加一个标签来明确指定ENABLE_SELECTIVE 似乎已经成功了。我读过 ENABLE_SELECTIVE 应该是默认值 (docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/…),但是我也读过它似乎不是这样工作的。如果您想发表您的评论作为答案,我很乐意将其标记为正确!谢谢。
标签: java hibernate jpa ehcache