繁体   English   中英

Ehcache二级缓存无法使用JPA和Hibernate?

[英]Ehcache second level cache not working with JPA and Hibernate?

编辑:我应该声明我已经研究了几天了 - 有很多关于“如何使用Hibernate配置ehcache”的信息,但他们大多没有提到使用JPA和注释 - 他们要么指的是纯粹的通过XML进行休眠或配置。 (只是想说清楚我已经在互联网上解决了这个问题。)我正在使用JPA和注释,所以这些配置指南中的大多数引用了我的app中没有的文件(比如hbm.xml)文件)。

我有一个使用Hibernate 3.6.10.FINAL,Spring Data 1.3.2.RELEASE和Spring版本3.2.1.RELEASE的应用程序。 我试图让第二级缓存在hibernate中工作。 根据文档,我可以通过包含以下依赖项和配置来实现:

(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

任何人都可以帮我诊断吗?

javax.persistence.Cachable要求您在persistence.xml中设置ENABLE_SELECTIVE。 您应该包含如下所示的行:

<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

查看http://docs.oracle.com/javaee/6/api/javax/persistence/Cacheable.html上的文档

另外,看看这个相关的问题: 如何使用JPA2的@Cacheable代替Hibernate的@Cache

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM