Hibernate3.6二级缓存配置 - ehcache

来源:互联网 发布:海康威视网络球机接线 编辑:程序博客网 时间:2024/05/29 13:37

     缓存大家应该都有用到吧,我也在不少项目中使用过,可是今天新弄了个项目hibernate换成3.6的版本了,报找不到org.hibernate.cache.EhCacheProvider类,费了好久才找到,原来在3.0后的版本中ehcache脱离出来了,或许是减少更少的依赖吧。所以说类的路径变成:net.sf.ehcache.hibernate.EhCacheProvider

  接下来简单介绍下配置,若您使用过ehcache,下面的步骤就可以直接跳跃了:

1.导入jar,编写ehcache.xml,如下

<?xml version="1.0" encoding="UTF-8"?>  <ehcache>   <diskStore path="java.io.tmpdir"/>   <defaultCache            maxElementsInMemory="10000"            eternal="false"            timeToIdleSeconds="120"            timeToLiveSeconds="120"            overflowToDisk="true"            diskPersistent="false"            diskExpiryThreadIntervalSeconds="120"            memoryStoreEvictionPolicy="LRU"            />  </ehcache>  


2.配置Hibernate属性

hibernate.cache.use_query_cache=truehibernate.cache.use_second_level_cache=truehibernate.cache.provider_class=net.sf.ehcache.hibernate.EhCacheProvider
注:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true 才行


3.设置需要缓存的实体

@Entity@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @Table(name = "qx_module")public class Module implements java.io.Serializable {

4.若需要查询缓存,如下

private List findList(final boolean isHql, final String queryString,final Map<String, Object> paramMap) {return getHibernateTemplate().executeFind(new HibernateCallback() {public Object doInHibernate(Session s) throws HibernateException,SQLException {Query query = null;if (isHql) {query = s.createQuery(queryString);} else {query = s.createSQLQuery(queryString);}if (null != paramMap && !paramMap.isEmpty()) {query.setProperties(paramMap);}query.setCacheable(true);  //启用查询缓存return query.list();}});}



原创粉丝点击