我正在使用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();
请告诉我怎么做。提前谢谢。
答案 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>