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

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

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

    Topquan's Blog

    分享價值----成就你我----我的博客----你的家

    hibernate延遲加載

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

    實體對象的延遲加載:
    1.在hibernate配置文件中的class指定

    集合類型的延遲加載:
    在set中指定lazy=true
    這樣只有實際加載與對象相關(guān)聯(lián)的集合對象的時候,再通過session從數(shù)據(jù)庫中加載實際的數(shù)據(jù)集。
    Hibernate.initialize方法可以強(qiáng)制Hibernate立即加載關(guān)聯(lián)的對象集,例如:
    Hibernate.initialize(user.getAddress());
    集合類型的緩存:
    如果為某個集合類設(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對集合類型進(jìn)行緩存的時候,分兩部分保存。首先是這個集合中所有實體的id列表,其次才是各個實體對象。
    這里制定了cache usage="read-only"只會使得Hibernate對數(shù)據(jù)索引進(jìn)行緩存。也就是說只緩存了集合中的數(shù)據(jù)索引,并不包含集合中的各個實體元素。
    如果指定cache usage="read-write"才會對集合中的實體進(jìn)行緩存。

    屬性的延遲加載:
    在property節(jié)點中聲明lazy=true,而且還需要借助Hibernate類增強(qiáng)器對POJO類的二進(jìn)制Class文件進(jìn)行強(qiáng)化處理。

     

    hibernate中的Collection
    Hibernate對JDK Collention接口的獨立實現(xiàn):
    由于傳統(tǒng)的Java Set, Map, List實現(xiàn)不能滿足要求,Hibernate根據(jù)這些接口提供了自己的實現(xiàn)。
    Hibernate的實現(xiàn):
    無序集:Set, Bag, Map
    有序集:List
    Bag相當(dāng)于一個允許重復(fù)元素存在的Set。
    因為Hibernate是自己的Collection實現(xiàn),所以如下語句會出錯,
    Set hset = (HashSet)user.getAddresses();
    會在運(yùn)行期報告一個java.lang.ClassCastException,因為實際上返回的是一個類型為org.hibernate.collention.Set的對象。
    所有我們在寫POJO時,必須用JDK Collection Interface(如Set, Map),而非特定的JDK Collection實現(xiàn)類(如HashSet, HashMap)聲明Collection型屬性的原因。例如:
    應(yīng)該是private Set addresses;
    而不是private HashSet addresses;

    collection類型屬性的保存過程。
    例如
    public class TUser implements Serializable {
     private Set addresses = new HashSet();
            ......
    }

    然后創(chuàng)建一個TUser實例后,就可以為其添加關(guān)聯(lián)的address對象:
    TUser user = new TUser();
    TAddress addr = new TAddress();
    addr.setAddress("HongKong");
    user.getAddress().add(addr);
    session.save(user);
    user對象在經(jīng)過Hibernate處理后發(fā)生了變化,首先,由于insert操作,產(chǎn)生了id值,并填充到user對象的id屬性,另一方面Hibernate使用了自己的collection實現(xiàn)對user中的HashSet型addresses屬性進(jìn)行了替換,并用數(shù)據(jù)對其進(jìn)行了填充。

    posted on 2006-08-05 01:20 topquan 閱讀(7062) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 亚洲风情亚Aⅴ在线发布| 亚洲中文字幕无码爆乳| 国产成人高清精品免费观看| 免费看AV毛片一区二区三区| 亚洲国产成人精品久久| 无码精品国产一区二区三区免费| 亚洲精品无码久久久久去q| 你懂得的在线观看免费视频| 亚洲美女又黄又爽在线观看| 三级网站在线免费观看| 亚洲一区二区中文| 国产高清不卡免费在线| 亚洲资源最新版在线观看| 最近最新中文字幕完整版免费高清 | 成人免费视频88| 国产精品亚洲色图| 亚洲一级Av无码毛片久久精品| 国产成人无码免费看片软件| 国产亚洲精品a在线观看app| 十八禁无码免费网站| 亚洲国产日韩女人aaaaaa毛片在线| 成年人在线免费观看| 美女黄色免费网站| 亚洲不卡中文字幕无码| 中文字幕免费在线| 亚洲国产成人精品无码区花野真一| 免费看国产精品麻豆| 国产麻豆成人传媒免费观看| 亚洲国产情侣一区二区三区| 四虎影库久免费视频| 国产在线观看免费视频软件 | 韩国二级毛片免费播放| 特级毛片在线大全免费播放| 久久国产亚洲观看| 成人免费a级毛片| 国产精品成人69XXX免费视频| 亚洲小视频在线观看| 国产精品另类激情久久久免费| 91免费福利视频| 亚洲成AV人影片在线观看| 亚洲日本一区二区三区在线|