Hibernate二級快取和查詢快取
阿新 • • 發佈:2019-02-12
二級快取:
1. jar包兩個
commons-logging.jar
ehcache-1.2.3.jar
2. 總配置檔案
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<mapping resource="entity/dept.hbm.xml" />
ehcache.xml
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
<!--Cache的名稱,必須是唯一的(ehcache會把這個cache放到HashMap裡)。-->
<!--eternal:是否是永恆資料,如果是,則它的超時設定會被忽略。-->
<!--timeToIdleSeconds:物件空閒時間,指物件在多長時間沒有被訪問就會失效。只對eternal為false的有效。預設值0,表示一直可以訪問。-->
<!--timeToLiveSeconds:物件存活時間,指物件從建立到失效所需要的時間。只對eternal為false的有效。預設值0,表示一直可以訪問。-->
<!--overflowToDisk:如果記憶體中資料數量超過maxElementsInMemory限制,是否要快取到磁碟上。-->
<cache name="entity.Emp"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="true"
/>
<cache name="entity.Dept"
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/>
</ehcache>
查詢快取:
二級快取仍然只能快取get()/load()方法獲取的session資料;
如果想要快取HQL語句的session資料,需要採用查詢快取(use-_query_cache)。
1. 開啟了二級快取
2. 總配置檔案
<property name="hibernate.cache.use_query_cache">true</property>
- HQL查詢時,加入
query.setcatchable(true)
Emp e=(Emp) query.setCacheable(true).uniqueResult();