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

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

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

    Kira-2006
    -僅僅是一陣風也罷了,偏偏是這樣永恒, 僅僅是一場夢也罷了,偏偏是如此的真實,
    posts - 4,comments - 7,trackbacks - 0

    一對一關聯
        主鍵關聯:
    即兩張表通過主鍵形成一對一映射關系。

        用戶TUser與護照TPassport關聯
        TUer.hbm.xml
        
    <hibernate-mapping>
    <class
        
    name="TUser"
        table
    ="T_User">
        
        
    <one-to-one 
            
    name="passport"
            class
    ="TPassport"
            cascade
    ="all"
            outer-join
    ="true"/>
        
    </class>
    </hibernate-mapping>
    cascade="all"表示級聯關系設置為“all”,即無論主空房執行任何操作,都會關聯類執行相同的操作。

        TPassport.hbm.xml
    <hibernate-mapping>
    <class
        
    name="TPassport"
        table
    ="T_Passport">
        
    <one-to-one
            
    name="user"
            class
    ="TUser"
            constrain
    ="true">
        .
    </class>
    </hibernate-mapping>

        
    constrain必須設定為“true”,以告知Hibernate當前主鍵上存在一個約束。
       
        測試代碼:
    TUser user = new TUser();
    user.setAge(
    new Integer(20));
    user.setName(
    "Carin");

    TPassport passport 
    = new TPassport();
    passport.setSerial(
    "PCN759386");
    passport.setExpiry(
    new Integer(20080101));

    //相互設置關聯
    passport.setUser(user);
    user.setPassport(passport);

    Transaction tx 
    = sessioin.beginTransaction();
    //由于TUser類的one-to-one節點被設置成
    //cascade=“all”其關聯的passport對象將被級聯保存
    session.save(user);

    tx.commit();
        以下代碼完成關聯對象的讀取:
    TUser user=(TUser)Hibernate.load(TUser.class,new Integer(15));
    System.out.println(
    "User name=>"+user.getName());
    System.out.println(
    "Passport Serial=>"+user.getPassport().getSerial());
        控制臺輸出:
    Hibernate:select tuser0_.id as id1_,
    from T_USER tuser0_
    left outer join
    T_PASSPORT tpassport1_ on tuser0_.id
    =tpassport1_.id
    where tuser0_.id
    =?
    User name
    =>Carin
    Passport Serial
    =>PCN759386
    Hibernate通過left outer join將T_User表及其關聯的T_Passport表同時讀入,因為此時將out-join=“true”。若設置為false,則會分開讀取兩個表。

    一對多關聯
        用戶TUser和地址TAddress的一對多關聯。
        單向一對多關聯
            主控方TUser的映射配置:
    <hibernate-mapping>
    <class
        
    name="TUser"
        table
    ="t_user"
        dynamic-update
    ="true"
        dynamic-insert
    ="true">
    .
        
    <set
            
    name="address"
            table
    ="t_address"
            cascade
    ="all"
            order-by
    ="zipcode asc">
            
    <key column="user_id"/>
            
    <one-to-many class="TAddress">
        
    </set>

    </class>
    </hibernate>
    被動方TAddress的記錄由Hibernate負責讀取,之后存放在主控方TUser指定的Collection類型屬性中。
    單向一對多的實現比較簡單,但是存在一個問題,由于是單向關聯,為了保持關聯關系,我們只能通過主控方對被動方進行級聯更新。如果被關聯方的關聯字段為“NOT NULL”,當Hibernate創建或者更新時,可能出現約束違例。

    雙向多對一關聯
        實際上是“一對多”與“多對一”關聯的組合。也就是說我們必須在主控方配置一對多關系的基礎上,在被控方配置與其對應的多對一關聯。
        TUser.hbm.xml
    <hibernate-mapping>
    <class
        
    name="TUser"
        table
    ="t_user"
        dynamic-update
    ="true"
        dynamic-insert
    ="true">
    .
        
    <set
            
    name="address"
            table
    ="t_address"
            lazy
    ="false"
            inverse
    ="true"
            cascade
    ="all"
            sort
    ="unsorted"
            order-by
    ="zipcode asc">
            
    <key column="user_id"/>
            
    <one-to-many class="TAddress"/>
        
    </set>
    .
    </class>
    </hibernate>
    inverse="true",TUser不在作為主控方,而是將關聯關系的維護工作交給關聯對象TAddress來做。
    在one-to-many關系中,將many一方設置為主控方(inverse=“true”)將有助于性能的改善。
        TAddress.hbm.xml
    <hibernat-mapping>
    <class
        
    name="TAddress"
        table
    ="t_address"
        dynamic-update
    ="false"
        dynamic-insert
    ="false">
    .
        
    <many-to-one
            
    name="user"
            class
    ="TUser"
            cascade
    ="none"
            outer-join
    ="auto"
            update
    ="true"
            insert
    ="true"
            access
    ="property"
            column
    ="user_id"
            not-null
    ="true"/>
    .
    </class>
    </hibernate-mapping>

    多對多關聯
    需要借助中間表來完成多對多映射信息的保存。
        由于多對多關聯的性能不佳(由于引入了中間表,一次讀取操作需要反復多次查詢),因此在設計中應該避免大量使用。同時,在多對多關系中,應根據情況,采取延遲加載機制來避免無謂的性能開銷。
        TGroup與TRole的多對多關聯:
        TGroup.hbm.xml:
    <hibernate-mapping>
    <class
        
    name="TGroup"
        table
    ="t_group"
        dynamic-update
    ="false"
        dynamic-insert
    ="false">
    .
        
    <set
            
    name="roles"
            table
    ="t_group_role"
            lazy
    ="false"
            inverse
    ="false"
            cascade
    ="save-update">
            
    <key column="group_id"/>
            
    <many-to-many
                
    class="TRole"
                column
    ="role_id"/>
        
    </set>
    .
    </class>
    </hibernate>
    t_group_role為t_group與t_role之間的映射表,它保存了group和role之間的映射關系。
    cascade=“save-update”,對于多對多邏輯而言,很少出現刪除一方需要級聯刪除所有關聯數據的情況,如刪除一個group,一般不會刪除其中包含的Role。
    column=“group_id”映射表中對于t_group表記錄的標識字段。
     
        TRole.hbm.xml:
    <hibernate-mapping>
    <class
        
    name="TRole"
        table
    ="t_role"
        dynamic-update
    ="false"
        dynamic-insert
    ="false">
    .
        
    <set
            
    name="groups"
            table
    ="t_group_role"
            lazy
    ="false"
            inverse
    ="true"
            cascade
    ="save-update"
            sort
    ="unsorted">
            
    <key column="role_id"/>
            
    <many-to-many 
                
    class="TGroup"
                column
    ="group_id"
                outer-join
    ="auto"/>
        
    </set>
    .
    </class>
    </hibernate>
    多對多關系中,由于關聯關系是兩張表相互引用,因此在保存關聯狀態時必須對雙方同時保存。
    posted on 2008-05-10 20:08 Kira-2006 閱讀(549) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 成年在线网站免费观看无广告| 久久久久久国产精品免费免费男同| 免费看一级一级人妻片 | 国产成人精品日本亚洲11| 黄色免费网站在线看| 久久免费国产精品一区二区| 在线a毛片免费视频观看| 亚洲精品无码专区在线在线播放| 国产精品亚洲片夜色在线| 一二三区免费视频| 成人免费午夜无码视频| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲日本VA午夜在线电影| 一区二区在线免费观看| 亚洲欧洲久久av| 亚洲老熟女五十路老熟女bbw| 久久精品一本到99热免费| 亚洲精品综合久久| 亚洲AV色欲色欲WWW| 午夜国产精品免费观看| 久久久久亚洲精品无码系列| 免费在线人人电影网| 最新中文字幕电影免费观看| 亚洲欧洲一区二区| 国产精品内射视频免费| 国产精品酒店视频免费看| 最新亚洲春色Av无码专区| 精品无码AV无码免费专区 | 视频免费1区二区三区| 成人免费男女视频网站慢动作| 亚洲理论片在线中文字幕| 无码av免费一区二区三区试看| 亚洲欧洲中文日韩久久AV乱码| 美女羞羞免费视频网站| 国产大片线上免费看| 国产精品亚洲五月天高清| 四虎影视免费永久在线观看 | 成人无遮挡毛片免费看| 亚洲中文字幕久久精品无码A| 青苹果乐园免费高清在线| 亚洲精品国产日韩|