<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    hibernate延遲加載

    Posted on 2007-09-07 15:05 semovy 閱讀(560) 評論(0)  編輯  收藏 所屬分類: Hibernate

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

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

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

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

     

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

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

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

    主站蜘蛛池模板: 啦啦啦高清视频在线观看免费 | 亚洲一级片内射网站在线观看| 国产免费人视频在线观看免费| mm1313亚洲精品无码又大又粗| 亚洲男人第一无码aⅴ网站| 亚洲AV人无码激艳猛片| 亚洲五月丁香综合视频| 日韩在线观看免费完整版视频| 香蕉视频在线免费看| 1000部拍拍拍18勿入免费视频下载 | 欧洲美女大片免费播放器视频| 亚洲视频免费在线观看| 女人被免费视频网站| 久久乐国产精品亚洲综合| 自拍日韩亚洲一区在线| 成人免费777777| 老湿机一区午夜精品免费福利| 1000部免费啪啪十八未年禁止观看| 亚洲系列国产精品制服丝袜第| 黄网站色视频免费观看45分钟| 亚洲精品WWW久久久久久| 中文字幕的电影免费网站| 麻豆国产入口在线观看免费 | 无码一区二区三区免费视频| 亚洲av无码专区在线电影天堂| 毛片免费在线观看| 亚洲国产成人久久综合一区77| 亚洲国产欧美国产综合一区| 最近中文字幕完整版免费高清| 久久精品国产亚洲麻豆| 无码天堂va亚洲va在线va| 天堂在线免费观看中文版| 四虎永久在线精品免费一区二区| 亚洲av综合av一区| 波多野结衣免费一区视频| 亚洲精品成人网久久久久久| 日本免费一区二区久久人人澡| 亚洲国产另类久久久精品黑人| 国产特黄一级一片免费| 亚洲成aⅴ人在线观看| 亚州免费一级毛片|