在hibernate.cfg.xml 中添加缓存 t1oo 一对多 t2oo (t2ooSet)
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_query_cache">true</property>
<mapping resource="hbn/bean/T1oo.hbm.xml" />
<mapping resource="hbn/bean/T2oo.hbm.xml" />
<class-cache class="hbn.bean.T1oo" usage="read-only" />
<collection-cache collection="hbn.bean.T1oo.t2ooSet" usage="read-only" />
<class-cache class="hbn.bean.T2oo" usage="read-only" />
在src根目录下 ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000" //最大缓存数目
eternal="false"<!-- 缓存是否持久 -->
timeToIdleSeconds="120" <!-- 当缓存闲置n秒后销毁 -->
timeToLiveSeconds="120"<!-- 当缓存存活n秒后销毁-->
overflowToDisk="true"<!-- 是否保存到磁盘,当系统当机时-->
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/>
<cache
name="hbn.bean.T1oo"
maxElementsInMemory="450"
eternal="false"
timeToLiveSeconds="600"
overflowToDisk="true"/>
</ehcache>
测试:
public void testCa()throws Exception{
System.out.println( getT1ooAll() );
Thread.sleep(2*1000);
System.out.println( getT1ooAll() );
}
控制台输出
Hibernate: select t1oo0_.id as id, t1oo0_.name as name0_ from t1oo t1oo0_ limit ?
Hibernate: select t2ooset0_.aid as aid1_, t2ooset0_.id as id1_, t2ooset0_.id as id0_, t2ooset0_.version as version1_0_, t2ooset0_.avg as avg1_0_, t2ooset0_.aid as aid1_0_ from t2oo t2ooset0_ where t2ooset0_.aid=?
Hibernate: select t2ooset0_.aid as aid1_, t2ooset0_.id as id1_, t2ooset0_.id as id0_, t2ooset0_.version as version1_0_, t2ooset0_.avg as avg1_0_, t2ooset0_.aid as aid1_0_ from t2oo t2ooset0_ where t2ooset0_.aid=?
24 : 23 : 25 : 2
//在这缓存成功 没向数据库提交 sql语句
24 : 23 : 25 : 2