欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Hibernate緩存配置
 
一級緩存
Hibernate的一級緩存是由Session提供的,因此它只存在于Session的生命周期中,當程序調用save(),update(),saveorupdate()等方法 及調用查詢(xún)接口list,filter,iterate時(shí),如session緩存中還不存在相應的對象,Hibernate會(huì )把該對象加入到一級緩存中,
當Session關(guān)閉的時(shí)候該Session所管理的一級緩存也會(huì )立即被清除
Hibernate的一級緩存是Session所內置的,不能被卸載,也不能進(jìn)行任何配置
 
二級緩存配置:   
  
1、首先要打開(kāi)二級緩存,在hibernate.cfg.xml中添加如下配置:   
<property name="hibernate.cache.use_second_level_cache">true</property>  
  
2、Hibernate的二級緩存使用第三方的緩存工具來(lái)實(shí)現,所以我們需要指定Hibernate使用哪個(gè)   
   緩存工具。如下配置指定Hibernate使用EhCache緩存工具。   
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>  
  
3、Hibernate在默認情況下并不會(huì )對所有實(shí)體對象進(jìn)行緩存,所以,我們需要指定緩存哪些對象,   
在實(shí)體對象的映射文件中(相應的<class>標簽內部),添加如下配置:   
<cache usage="read-only"/>  
  
usage="read-only"是“只讀”緩存策略。   
  
注意,這個(gè)<cache>標簽只能放在<class>標簽的內部,而且必須處在<id>標簽的前面?。?!   
這個(gè)<cache>標簽放在哪些<class>標簽下面,就說(shuō)明會(huì )多這些類(lèi)的對象進(jìn)行緩存   
  
4、對于第3步,有一個(gè)可選的方案是在hibernate.cfg.xml文件中指定哪些類(lèi)的對象需要緩存,   
   而不需要使用<cache>標簽來(lái)指定。如:   
   在hibernate.cfg.xml中添加如下配置:   
   <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" />  
     
   注意,這個(gè)<class-cache>標簽必須放在<mapping>標簽的后面??!   
 
Hibernate緩存配置
_____________________________________________________________________________________
Hibernate的緩存分為:
  一級緩存:在Session級別的,在Session關(guān)閉的時(shí)候,一級緩存就失效了。
  二級緩存:在SessionFactory級別的,它可以使用不同的緩存實(shí)現,如EhCache、JBossCache、OsCache等。
  
緩存的注釋寫(xiě)法如下,加在Entity的java類(lèi)上:
  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
  
緩存的方式有四種,分別為:
  CacheConcurrencyStrategy.NONE
  CacheConcurrencyStrategy.READ_ONLY,只讀模式,在此模式下,如果對數據進(jìn)行更新操作,會(huì )有異常;
  CacheConcurrencyStrategy.READ_WRITE,讀寫(xiě)模式在更新緩存的時(shí)候會(huì )把緩存里面的數據換成一個(gè)鎖,其它事務(wù)如果去取相應的緩存數據,發(fā)現被鎖了,直接就去數據庫查詢(xún);
  CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不嚴格的讀寫(xiě)模式則不會(huì )的緩存數據加鎖;
  CacheConcurrencyStrategy.TRANSACTIONAL,事務(wù)模式指緩存支持事務(wù),當事務(wù)回滾時(shí),緩存也能回滾,只支持JTA環(huán)境。
  
另外還有如下注意事項:
  1、查詢(xún)緩存需要在Query的相應方法執行前加上這么一句:
  query.setCacheable(true);
  在使用Hibernate時(shí),獲得的query有setCacheable方法,可以設置使用緩存,但當使用JPA時(shí),javax.persistence.Query并沒(méi)有setCacheable方法,此時(shí)如果JPA的實(shí)現是Hibernate時(shí),可以將其進(jìn)行如下轉化,再調用setCacheable方法(如果JPA的實(shí)現是其它ORMAP框架,就不知道怎么做了)。
if (query instanceof org.hibernate.ejb.QueryImpl) {
    ((org.hibernate.ejb.QueryImpl) query).getHibernateQuery().setCacheable(true);
}
  2、還有就是查詢(xún)緩存的查詢(xún)執行后,會(huì )將查詢(xún)結果放入二級緩存中,但是放入的形式是以ID為Key,實(shí)例作為一個(gè)Value。
  3、hibernate的配置文件中需加入如下信息:
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
 
 
 
緩存映射(Cache mappings)
類(lèi)或者集合映射的“<cache>元素”可以有下列形式:
<cache  usage="transactional|read-write|nonstrict-read-write|read-only" (1)/>
(1)
usage說(shuō)明了緩存的策略: transactional、 read-write、 nonstrict-read-write或 read-only。 
另外(首選?), 你可以在hibernate.cfg.xml中指定<class-cache>和 <collection-cache> 元素。
這里的usage 屬性指明了緩存并 發(fā)策略(cache concurrency strategy)。
 

只讀 緩存(read only)
如果你的應用程序只需讀取一個(gè)持久化類(lèi)的實(shí)例,而無(wú)需對其修改, 那么就可以對其進(jìn)行只讀 緩存。這是最簡(jiǎn)單,也是實(shí)用性最好的方法。甚至在集群中,它也能完美地運作。
<class name="eg.Immutable" mutable="false"> <cache usage="read-only"/> ....</class>
 

讀/寫(xiě)緩存( read/write)
如果應用程序需要更新數據,那么使用讀/寫(xiě)緩存 比較合適。 如果應用程序要求“序列化事務(wù)”的隔離級別(serializable transaction isolation level),那么就決不能使用這種緩存策略。 如果在JTA環(huán)境中使用緩存,你必須指定hibernate.transaction.manager_lookup_class屬 性的值, 通過(guò)它,Hibernate才能知道該應用程序中JTA的TransactionManager的 具體策略。 在其它環(huán)境中,你必須保證在Session.close()、或Session.disconnect()調用前, 整個(gè)事務(wù)已經(jīng)結束。 如果你想在集群環(huán)境中使用此策略,你必須保證底層的緩存實(shí)現支持鎖定(locking)。Hibernate內置的緩存策略并不支持鎖定功能。
<class name="eg.Cat" .... > <cache usage="read-write"/> .... <set name="kittens" ... > <cache usage="read-write"/> .... </set></class>
 

非嚴格讀/寫(xiě)緩存(nonstrict read/write)
如果應用程序只偶爾需要更新數據(也就是說(shuō),兩個(gè)事務(wù)同時(shí)更新同一記錄的情況很不常見(jiàn)),也不需要十分嚴格的事務(wù)隔離, 那么比較適合使用非嚴格讀/寫(xiě)緩存策略。如果在JTA環(huán)境中使用該策略, 你必須為其指定hibernate.transaction.manager_lookup_class屬性的值, 在其它環(huán)境中,你必須保證在Session.close()、或Session.disconnect()調用前, 整個(gè)事務(wù)已經(jīng)結束
1.@Entity  
2.@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)   
3.public class Forest { ... }  

1.@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)   
2.@JoinColumn(name="CUST_ID")   
3.@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)   
4.public SortedSet getTickets() {   
5.    return tickets;   
6.}  

1.@Cache(   
2.    CacheConcurrencyStrategy usage();                 (1)   
3.    String region() default "";                       (2)   
4.    String include() default "all";                   (3)   
5.)  
(1) usage: 提供緩存對象的事務(wù)隔離機制,可選值有以下幾種
(NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)
(2) region (optional): 指定緩存的區域,默認是類(lèi)的全限定名。利用緩存區域,可以更精確的指定每個(gè)區域的緩存超前策略。如果指定了緩存區域前綴(在hibernate.cfg.xml中設置cache.region_prefix屬性為一個(gè)字符串),則所有的緩存區域名前將加上這個(gè)前綴。
(3) include (optional): all to include all properties, non-lazy to only include non lazy properties (default all).
如果不是使用annotation的話(huà),則是在Hbm文件中添加cache usage="read-only" 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Hibernate二級緩存【轉】新理解
Hibernate 4.2.2配置二級緩存的詳細過(guò)程
Hibernate二級緩存攻略
Hibernate ehcache二級緩存技術(shù)
Hibernate一級緩存和二級緩存
EHCache - 單落撒旦的日志 - 網(wǎng)易博客
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久