<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    hibernate延遲加載

    Posted on 2007-09-07 15:05 semovy 閱讀(552) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Hibernate

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

    實(shí)體對(duì)象的延遲加載:
    1.在hibernate配置文件中的class指定

    集合類(lèi)型的延遲加載:
    在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è)定了緩存,如
    <set
         name="address"
         table="t_address"
         lazy="true"
         ......
    >
         <cache usage="read-only"/>
         <key column="user_id" />
         <one-to-many class="cn.blogjava.TAddress" />
    </set>
    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)行緩存。

    屬性的延遲加載:
    在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ò)程。
    例如
    public class TUser implements Serializable {
    private Set addresses = new HashSet();
             ......
    }

    然后創(chuàng)建一個(gè)TUser實(shí)例后,就可以為其添加關(guān)聯(lián)的address對(duì)象:
    TUser user = new TUser();
    TAddress addr = new TAddress();
    addr.setAddress("HongKong");
    user.getAddress().add(addr);
    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)行了填充。

    主站蜘蛛池模板: 区久久AAA片69亚洲| 国产av无码专区亚洲国产精品| 亚洲男人在线无码视频| 亚洲精品视频在线| 日本亚洲中午字幕乱码| 国产白丝无码免费视频| 一级毛片aaaaaa视频免费看| aⅴ免费在线观看| 日韩在线天堂免费观看| 亚洲国产日韩在线视频| 亚洲永久网址在线观看| 成人性做爰aaa片免费看| 好吊妞998视频免费观看在线| 亚洲精品456播放| 国产亚洲精品精华液| 亚洲熟妇av午夜无码不卡| baoyu122.永久免费视频| 成年女人毛片免费视频| 亚洲成AV人片在线观看无码| 中文字幕亚洲综合小综合在线 | 另类免费视频一区二区在线观看| 免费人成视频在线| 久热综合在线亚洲精品| 特黄特色大片免费| 国产在线观看麻豆91精品免费 | 日韩电影免费在线观看网站| 日本免费人成视频播放| 亚洲视频免费一区| 美女网站在线观看视频免费的| 午夜dj免费在线观看| 久久亚洲AV成人无码电影| eeuss影院免费92242部| 四虎成人精品一区二区免费网站| 亚洲精品~无码抽插| 色老头综合免费视频| 好男人视频在线观看免费看片| 亚洲高清无在码在线无弹窗 | 国产精品免费看久久久| 亚洲国产午夜福利在线播放| 亚洲一本到无码av中文字幕 | AV在线播放日韩亚洲欧|