在Hibernate中使用EhCache

openkk 13年前發布 | 58K 次閱讀 Hibernate Ehcache 緩存組件

EhCache是一個純Java程序,可以在Hibernate中作為一個插件引入。它具有運行速度快、結構簡單、占用內存小、很小的依賴性、支持多CPU服務器、文檔齊全等特點。

在Hibernate中使用EhCache,需要在hibernate.cfg.xml中設置如下:

<property name=” hibernate.cache.provider_class”>
org.hibernate.cache.EhCacheProvider
</property>
EhCacheProvider類位于hibernate3.jar包中,而不是位于ehcache-1.1.jar包中。EhCache有自己的配置文檔,名為ehcache.xml。在Hibernate3.x中的etc目錄下有ehcache.xml的示范文件,將其復制應用程序的src目錄下(編譯時會把ehcache.xml復制到WEB-INF/classess目錄下),對其中的相關值進行更改以和自己的程序相適合。進行配置后,在ehcache.xml文件中的全部代碼如下:
  <diskStore path="d:\\cache"/> //設置cache.data文件的存放位置
    <defaultCache
maxElementsInMemory="10000" //緩存中允許創建的最大對象數
eternal="false" //緩存中對象是否為永久的
timeToIdleSeconds="120" //緩存數據鈍化時間(即對象在它過期前的空閑時間)
timeToLiveSeconds="120" //緩存數據生存時間(即對象在它過期前的生存時間)
overflowToDisk="true"  //是否啟用磁盤緩存
/>
    <cache name="Student"   //用戶自定義的Cache配置
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="true"
/>
</ehcache>

此外,還需要在持久化類的映射文件中進行配置。例如,Group(班級)和Student(學生)是一對多的關系,它們對應的數據表分別是t_group和t_student。現在要把Student類的數據進行二級緩存,這需要在兩個映射文件(Student.hbm.xml和Group.hbm.xml)中都對二級緩存進行配置。

在Group.hbm.xml中配置二級緩存如下:

    ……
<hibernate-mapping>
<class name="Group" table="t_group" lazy="false">
……
<set name="students" cascade="save-update" 
inverse="true"   <!--關系由Student維護-->
lazy="true"
>
<cache usage="read-write"/>  //<!--集合中的數據將被緩存-->
<key column="id"/>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
……
上述文件雖然在<set>標記中設置了<cache usage="read-write"/>,但Hibernate僅把和Group相關的Student的主鍵id加入到緩存中,如果希望把整個Student的散裝屬性都加入到二級緩存中,還需要在Student.hbm.xml文件的<class>標記中加入<cache>子標記,如下所示:
<class name="Student" table="t_student" >
<cache usage="read-write" /> <!--cache標記需跟在class標記后-->
……
</class>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!