1. 程式人生 > >hibernate4.3.6二級快取配置方法

hibernate4.3.6二級快取配置方法

     hibernate快取可以分為一級快取和二級快取,一級快取就是session級別的,只能為單個session共享,這是hibernate自己帶的無需我們配置就可以使用。

     sessionFactory快取可以根據功能和目的的不同劃分為內建快取和外接快取:

    1、sessionFactory內建快取中存放了對映元資料和預定義SQL語句,對映元資料是對映檔案中資料的副本,而預定義SQL語句是在Hibernate初始化階段根據對映元資料推到出來的。內建快取是隻讀的,應用程式不能修改對映元資料和預定義的SQL語句,因此,sessionFactory不需要進行內建快取與對映檔案的同步。

    2、外接快取是一個可配置的外掛,在預設情況下,sessionFactory不會啟用這個外掛,外接快取的資料是資料庫資料的副本,外接快取的介質是記憶體或者硬碟,sessionFactory的外接快取也被成為hibernate的二級快取。

    Hibernate的快取都是以ID為key的map來實現對物件的快取,Hibernate的二級快取作用級別是sessionFactory,可以被所用session所共享。

   二級快取工作原來:

        1、在執行各種查詢條件時,如果所獲得的結果集是實體物件的集合,那麼就會把所有對的物件根據ID放入到二級快取中。

        2、當Hibernate根據ID訪問資料物件的時候,首先會從session的一級快取中找,如果找不到並且配置了二級快取,就會從二級快取中找,如果還找不到就查資料庫。

在預設情況下Hibernate會使用EHCache作為二級快取元件,但是可以通過hibernate.cache.provider_class屬性制定其他的快取策略。

二級快取配置步驟:

    1、在hibernate.cfg.xml檔案中配置二級快取相關配置

        <!-- 配置Hibernate的二級快取, -->
<!-- 開啟查詢快取 -->
<property name="cache.use_query_cache">true</property>
<!-- 開啟二級快取 -->
        <property name="cache.use_second_level_cache">true</property>
        <property name="cache.use_structured_entries">true</property>
        <property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
        <property name="net.sf.ehcache.configurationResourceName">ehcache.xml</property>

     2、在hibernate.cfg.xml統計目錄下建立eacache.xml

         <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd" name="tc"
            updateCheck="false">
            <!--maxElementsInMemory 快取最大個數    
           eternal:物件是否永久有效,一但設定了,timeout將不起作用
           timeToIdleSeconds:設定物件在失效前的允許閒置時間(單位:秒)。僅當eternal=false物件不是永久有效時使用,可選屬性,預設值是0,也就是可閒置時間無窮    大。
           timeToLiveSeconds:設定物件在失效前允許存活時間(單位:秒)。最大時間介於建立時間和失效時間之間。僅當eternal=false物件不是永久有效時使用,預設是0.,也就是物件存活時間無窮大。  
          overflowToDisk:當記憶體中物件數量達到maxElementsInMemory時,Ehcache將會物件寫到磁碟中。  
          diskSpoolBufferSizeMB:這個引數設定DiskStore(磁碟快取)的快取區大小。預設是30MB。每個Cache都應該有自己的一個緩衝區。  
          maxElementsOnDisk:硬碟最大快取個數。  
          diskPersistent:是否快取虛擬機器重啟期資料 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.  
          diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒。  
          memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。預設策略是LRU(最近最少使用)。你可以設定為FIFO(先進先出)或是LFU(較少使用)。  
           clearOnFlush:記憶體數量最大時是否清除
       -->
    <defaultCache
            maxElementsInMemory="1000"  
            eternal="true"
            overflowToDisk="false">
    </defaultCache>
</ehcache>

3、在對映檔案中加入<!-- 給具體實體類使用二級快取--><cache usage="read-only"/> 

      <class name="Person" table="person">
<!-- 給具體實體類使用二級快取-->
<cache usage="read-only"/> 
<id name="id">
            <generator class="native"/>
</id>
<property name="name" />
<property name="team" />
<property name="age" />
<property name="position" />
<property name="worth" />
</class>

二級快取配置 成功,注意:在配置過程中可能會出現各種各樣的錯誤,出現錯誤首先檢查你的hibernate包的版本是否一致,如果配置不成功那麼就換個版本試試,所有問題都是可以解決的。