轉載:Hibernate + JPA @Cache ._第1頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、轉載:hibernate + jpa cache .一級緩存 hibernate 的一級緩存是由 session 提供的,因此它只存在于 session 的生命周期中,當程序調用 save(),up(),saveorupdate() 等辦法 及調用查詢接口 list,filter,iterate 時,如 session 緩存中還不存在相應的對象, hibernate 會把該對象加入到一級緩存中, 當 session 關閉的時候該 session 所管理的一級緩存也會立刻被清除 hibernate 的一級緩存是 session 所內置的,不能被卸載,也不能舉行任何配置 二級緩存配置 1 、首先要

2、打開二級緩存,在 hibernate.cfg.xml 中添加如下配置: property name=hibernate.cache.use_second_level_cache ue /property 2 、 hibernate 的二級緩存用法第三方的緩存工具來實現,所以我們需要指定 hibernate 用法哪個 緩存工具。如下配置指定 hibernate 用法 ehcache 緩存工具。 property name=ver_class org.hibernate.cache.ehcacheprovider /property 3 、 hibernate

3、 在默認狀況下并不會對全部實體對象舉行緩存,所以,我們需要指定緩存哪些對象, 在實體對象的映射文件中(相應的 class 標簽內部),添加如下配置: cache usage=read-only/ usage=read-only 是“只讀”緩存策略。 注重,這個 cache 標簽只能放在 class 標簽的內部,而且必需處在 id 標簽的前面! 這個 cache 標簽放在哪些 class 標簽下面,就解釋會多這些類的對象舉行緩存 4 、對于第 3 步,有一個可選的計劃是在 hibernate.cfg.xml 文件中指定哪些類的對象需要緩存, 而不需要用法 cache 標簽來指定。如: 在 hib

4、ernate.cfg.xml 中添加如下配置: class-cache usage=read-only / 注重,這個 class-cache 標簽必需放在 map 標簽的后面! hibernate緩存配置 _ hibernate的緩存分為: 一級緩存:在session級別的,在session關閉的時候,一級緩存就失效了。 二級緩存:在sessionfactory級別的,它可以用法不同的緩存實現,如ehcache 、jbosscache、oscache等。 緩存的注釋寫法如下,加在entity的java類上: cache(usage = cachecourrencystrategy.nonst

5、rict_read_write) 緩存的方式有四種,分離為: cacheconcurrencystrategy.none cacheconcurrencystrategy.read_only,只讀模式,在此模式下,假如對數據舉行更新操作,會有異樣; cacheconcurrencystrategy.read_write,讀寫模式在更新緩存的時候會把緩存里面的數據換成一個鎖,其它事務假如去取相應的緩存數據,發(fā)覺被鎖了,挺直就去數據庫查詢; cacheconcurrencystrategy.nonstrict_read_write,不嚴格的讀寫模式則不會的緩存數據加鎖; cacheconcurre

6、ncystrategy.transactional,事務模式指緩存支持事務,當事務回滾時,緩存也能回滾,只支持jta環(huán)境。 另外還有如下注重事項: 1、查詢緩存需要在query的相應辦法執(zhí)行前加上這么一句: query.cacheable(true); 在用法hibernate時,獲得的query有setcacheable 辦法,可以設置用法緩存,但當用法jpa時,javax.persistence.query并沒有setcacheable辦法,此時假如jpa的實現是hibernate時,可以將其舉行如下轉化,再調用setcacheable辦法(假如jpa的實現是其它ormap框架,就不知道怎

7、么做了)。 if (query instanceof org.hibernate.ejb.queryimpl) (org.hibernate.ejb.queryimpl) query).gethibernatequery().setcacheable(true); 2、還有就是查詢緩存的查詢執(zhí)行后,會將查詢結果放入二級緩存中,但是放入的形式是以id為key,實例作為一個value。 3、hibernate的配置文件中需加入如下信息: property name=vider_class value=org.hibernate.cache.ehcachepro

8、vider / property name=hibernate.cache.use_second_level_cache value=true / property name=hibernate.cache.use_query_cache value=true / 緩存映射(cache mappings) 類或者集合映射的“ cache 元素”可以有下列形式: cache usage=transactional|read-|nonstrict-read-write|read-only (1) / usage 解釋了緩存的策略: transactional 、 read-write 、 nons

9、trict-read-write 或 read-only 。 另外(首選?), 你可以在hibernate.cfg.xml中指定 class-cache 和 lection-cache 元素。 這里的usage 屬性指明白緩存并 發(fā)策略(cache concurrency strategy) 。 只讀 緩存(read only) 假如你的應用程序只需讀取一個持久化類的實例,而無需對其修改, 那么就可以對其舉行只讀 緩存。這是最容易,也是有用性最好的辦法。甚至在中,它也能完善地運作。 class name=eg.immutable mutable=fae cache usage=read-onl

10、y/ . /class 讀/寫緩存( read/write) 假如應用程序需要更新數據,那么用法讀/寫緩存 比較合適。 假如應用程序要求“序列化事務”的隔離級別(serializable transaction isolation level),那么就決不能用法這種緩存策略。 假如在jta環(huán)境中用法緩存,你必需指定hibernate.transaction.manager_up_class 屬 性的值, 通過它,hibernate才干知道該應用程序中jta的transactionmanager 的 詳細策略。 在其它環(huán)境中,你必需保證在session.close() 、或session.disconnect()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論