您的位置:首页 > 其它

EhCache配置Hibernate二级缓存

2013-09-11 14:26 447 查看
使用EhCache配置Hibernate二级缓存:

配置Hibernatee二级缓存准备:

1)把ehcache-1.2.3.jar加入到当前应用的classpath中。

2)在hibernate.cfg.xml文件中加入EhCache缓存插件的提供类。
<property name="hibernate.cache.provider_class">     
org.hibernate.cache.EhCacheProvider     
</property>   

3)挎贝ehcache.xml文件到类路径(项目工程的src目录下),这个文件在Hibernate安装目录的etc下。
<?xml version="1.0" encoding="utf-8"?> 
 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="org.qiujy.domain.cachedemo.Category" table="categories"> 
 
//配置缓存,必须紧跟在class元素后面对缓存中的Category对象采用读写型的并发访问策略  
 
<cache usage="read-write"/> 
 
<id name="id" type="java.lang.Long"> 
<column name="id" /> 
<generator class="native" /> 
</id> 
<!-- 配置版本号,必须紧跟在id元素后面 --> 
<version name="version" column="version" type="java.lang.Long" /> 
 
<property name="name" type="java.lang.String"> 
<column name="name" length="32" not-null="true"/> 
</property> 
 
<property name="description" type="java.lang.String"> 
<column name="description" length="255"/> 
</property> 
 
<set name="products" table="products" cascade="all" inverse="true"> 
 
<cache usage="read-write"/> 
 
<key column="categoryId" not-null="true"/> 
<one-to-many class="org.qiujy.domain.cachedemo.Product"/> 
</set> 
 
</class> 
</hibernate-mapping> 

Product.hbm.xml
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="org.qiujy.domain.cachedemo.Product" table="products"> 
 
<cache usage="read-write"/> 
 
<id name="id" type="java.lang.Long"> 
<column name="id" /> 
<generator class="native" /> 
</id> 
<!-- 配置版本号,必须紧跟在id元素后面 --> 
<version name="version" column="version" type="java.lang.Long" /> 
 
<property name="name" type="java.lang.String"> 
<column name="name" length="32" not-null="true"/> 
</property> 
 
<property name="description" type="java.lang.String"> 
<column name="description" length="255"/> 
</property> 
 
<property name="unitCost" type="java.lang.Double"> 
<column name="unitCost" /> 
</property> 
 
<property name="pubTime" type="java.util.Date"> 
<column name="pubTime" not-null="true" /> 
</property> 
 
<many-to-one name="category" 
column="categoryId" 
class="org.qiujy.domain.cachedemo.Category" 
cascade="save-update" 
not-null="true"> 
</many-to-one> 
<
set
name
=
"products"
table
=
"products"
cascade
=
"all"
inverse
=
"true"
>


 
<
cache
usage
=
"read-write"
/> 

<
key
column
=
"categoryId"
not-null
=
"true"
/>

[/code]
<
one-to-many
class
=
"org.qiujy.domain.cachedemo.Product"
/>

[/code]

 </
set
> 

[/code]

</class> 
</hibernate-mapping> 

编辑ehcache.xml文件:
<ehcache> 
<diskStore path="c:\\ehcache\"/> 
<defaultCache 
maxElementsInMemory="10000" 
eternal="false" 
timeToIdleSeconds="120" 
timeToLiveSeconds="120" 
overflowToDisk="true"   
/> 
 
<!-- 设置Category类的缓存的数据过期策略 --> 
<cache name="org.qiujy.domain.cachedemo.Category" 
maxElementsInMemory="100" 
eternal="true" 
timeToIdleSeconds="0" 
timeToLiveSeconds="0" 
overflowToDisk="false" 
/> 
 
<!-- 设置Category类的products集合的缓存的数据过期策略 --> 
<cache name="org.qiujy.domain.cachedemo.Category.products" 
maxElementsInMemory="500" 
eternal="false" 
timeToIdleSeconds="300" 
timeToLiveSeconds="600" 
overflowToDisk="true" 
/> 
 
<cache name="org.qiujy.domain.cachedemo.Product" 
maxElementsInMemory="500" 
eternal="false" 
timeToIdleSeconds="300" 
timeToLiveSeconds="600" 
overflowToDisk="true" 
/> 
 
</ehcache> 

在Spring托管的Hibernate二级缓存

1.在spring的配置文件中,hibernate部分加入 xml 代码 org.hibernate.cache.EhCacheProvider true 

2.为HBM表设置cache策略 xml 代码 

3.在DAO中,调用find方法查询之前,设置使用缓存 Java代码 getHibernateTemplate().setCacheQueries(true);

补充: 如果不设置“查询缓存”,那么Hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置 hibernate.cache.use_query_cache true 才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate 二级组存