日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
深索Hibernate延遲加載技術(shù)

今天我們主要來(lái)深索Hibernate延遲加載技術(shù),Hibernate延遲加載技術(shù)包括實(shí)體對(duì)象的延遲加載、集合類(lèi)型的延遲加載等。

Hibernate延遲加載的對(duì)象:

◆hibernate 2針對(duì)實(shí)體對(duì)象和集合
◆hibernate 3同時(shí)提供了屬性的延遲加載功能。
其中對(duì)集合的延遲加載特性意義最為重大。

實(shí)體對(duì)象的Hibernate延遲加載:

在hibernate配置文件中的class指定

集合類(lèi)型的Hibernate延遲加載:

在set中指定lazy=true
這樣只有實(shí)際加載與對(duì)象相關(guān)聯(lián)的集合對(duì)象的時(shí)候,再通過(guò)session從數(shù)據(jù)庫(kù)中加載實(shí)際的數(shù)據(jù)集。
Hibernate.initialize方法可以強(qiáng)制Hibernate立即加載關(guān)聯(lián)的對(duì)象集,例如:
Hibernate.initialize(user.getAddress());
集合類(lèi)型的緩存:

如果為某個(gè)集合類(lèi)設(shè)定了緩存,如

 
 
 
  1.  
  2.     name="address"
  3.     table="t_address"
  4.     lazy="true"
  5.     ......
  6. >
  7.      usage="read-only"/>
  8.      column="user_id" />
  9.      class="cn.blogjava.TAddress" />

Hibernate對(duì)集合類(lèi)型進(jìn)行緩存的時(shí)候,分兩部分保存。首先是這個(gè)集合中所有實(shí)體的id列表,其次才是各個(gè)實(shí)體對(duì)象。
這里制定了cache usage="read-only"只會(huì)使得Hibernate對(duì)數(shù)據(jù)索引進(jìn)行緩存。也就是說(shuō)只緩存了集合中的數(shù)據(jù)索引,并不包含集合中的各個(gè)實(shí)體元素。
如果指定cache usage="read-write"才會(huì)對(duì)集合中的實(shí)體進(jìn)行緩存。

屬性的Hibernate延遲加載:

在property節(jié)點(diǎn)中聲明lazy=true,而且還需要借助Hibernate類(lèi)增強(qiáng)器對(duì)POJO類(lèi)的二進(jìn)制Class文件進(jìn)行強(qiáng)化處理。

hibernate中的Collection
Hibernate對(duì)JDK Collention接口的獨(dú)立實(shí)現(xiàn):
由于傳統(tǒng)的Java Set, Map, List實(shí)現(xiàn)不能滿(mǎn)足要求,Hibernate根據(jù)這些接口提供了自己的實(shí)現(xiàn)。

Hibernate的實(shí)現(xiàn):

◆無(wú)序集:Set, Bag, Map
◆有序集:List
Bag相當(dāng)于一個(gè)允許重復(fù)元素存在的Set。因?yàn)镠ibernate是自己的Collection實(shí)現(xiàn),所以如下語(yǔ)句會(huì)出錯(cuò),Set hset = (HashSet)user.getAddresses();會(huì)在運(yùn)行期報(bào)告一個(gè)java.lang.ClassCastException,因?yàn)閷?shí)際上返回的是一個(gè)類(lèi)型為org.hibernate.collention.Set的對(duì)象。

所有我們?cè)趯?xiě)POJO時(shí),必須用JDK Collection Interface(如Set, Map),而非特定的JDK Collection實(shí)現(xiàn)類(lèi)(如HashSet, HashMap)聲明Collection型屬性的原因。例如:應(yīng)該是private Set addresses;而不是private HashSet addresses;collection類(lèi)型屬性的保存過(guò)程。

例如

 
 
 
  1. public class TUser implements Serializable {
  2.  private Set addresses = new HashSet();
  3.         ......
  4. }

然后創(chuàng)建一個(gè)TUser實(shí)例后,就可以為其添加關(guān)聯(lián)的address對(duì)象:

 
 
 
  1. TUser user = new TUser();
  2. TAddress addr = new TAddress();
  3. addr.setAddress("HongKong");
  4. user.getAddress().add(addr);
  5. session.save(user);

user對(duì)象在經(jīng)過(guò)Hibernate處理后發(fā)生了變化,首先,由于insert操作,產(chǎn)生了id值,并填充到user對(duì)象的id屬性,另一方面Hibernate使用了自己的collection實(shí)現(xiàn)對(duì)user中的HashSet型addresses屬性進(jìn)行了替換,并用數(shù)據(jù)對(duì)其進(jìn)行了填充。


本文名稱(chēng):深索Hibernate延遲加載技術(shù)
URL分享:http://www.5511xx.com/article/dpopijp.html