Spring + Hibernate ehcache二级缓存

时间:2015-09-08 11:03:53

标签: spring hibernate maven ehcache

我正在使用Spring版本4.1.1和hibernate版本4.3.7,我正在使用注释来与数据库进行映射。现在我想集成Hibernate二级缓存。

<props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext
        </prop>
        <prop key="hibernate.show_sql">false</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>


    </props>

我正在使用Hibernate依赖

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.7.Final</version>
    </dependency>

这是我正在查询的类文件

@Entity
@Table(name = "assets")
public class Assets {

@Id
@Column(name = "assetID")
private Integer assetID;

@Column(name = "assetName")
private String assetName;
}

并且最终的hibernate查询是

sessionFactory.getCurrentSession()
            .createQuery("from Assets").setCacheable(true).list();

请告诉我怎么做。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您需要在spring配置文件中配置二级缓存

<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>

即使您仅使用查询缓存,也需要注释您的实体,因为它会导致二级缓存。

@Entity
@Table(name = "assets")
@Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Assets {
....
}

您还需要一个xml文件来配置缓存区域(ehcache.xml),这是一个默认缓存区域配置for more details

<ehcache>
   <diskStore path="java.io.tmpdir"/>
   <defaultCache
      maxEntriesLocalHeap="10000"
      eternal="false"
      timeToIdleSeconds="120"
      timeToLiveSeconds="120"
      maxEntriesLocalDisk="10000000"
      diskExpiryThreadIntervalSeconds="120"
      memoryStoreEvictionPolicy="LRU">
      <persistence strategy="localTempSwap"/>
   </defaultCache>
</ehcache>

更新:

这对我有用:

<!-- EHCache-Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>4.3.8.Final</version>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.6.9</version>
    </dependency>