1. 程式人生 > >Hibernate二級快取和查詢快取

Hibernate二級快取和查詢快取

二級快取:
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>
  1. HQL查詢時,加入query.setcatchable(true)
    Emp e=(Emp) query.setCacheable(true).uniqueResult();