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

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

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

    posts - 60,comments - 71,trackbacks - 0

    一、多對(duì)一進(jìn)行關(guān)聯(lián)(多個(gè)學(xué)生對(duì)應(yīng)同一間宿舍)---學(xué)生是主體,宿舍是附體,關(guān)聯(lián)關(guān)系<many-to-one>在主體學(xué)生中設(shè)置,在學(xué)生類中設(shè)置宿舍類,由于宿舍類只有一個(gè)可以直接用類來(lái)設(shè)置,在映射學(xué)生類(User)中包含宿舍這個(gè)類(Room),在映射配置文件(User.hbm.xml)中定義

    <many-to-one name="room" column="room_id" cascade="save-update" class="com.wyq.hibernate2.Room"></many-to-one>

    哪個(gè)是主體類就在哪個(gè)配置文件定義關(guān)聯(lián)關(guān)系.

    cascade屬性:表示關(guān)聯(lián)對(duì)象的持久化,該屬性也要設(shè)置在主體中,作用就是當(dāng)主控方執(zhí)行操作時(shí),關(guān)聯(lián)對(duì)象(被動(dòng)方)是否同步執(zhí)行同一操作.
    cascade的值:all:表示所有情況下都進(jìn)行級(jí)聯(lián)操作.
                            none:所有情況下都不進(jìn)行級(jí)聯(lián)操作
                            save-update:在執(zhí)行save-update時(shí)進(jìn)行級(jí)聯(lián)操作.
                            delete:在執(zhí)行delete時(shí)進(jìn)行級(jí)聯(lián)操作.

    注意:使用cascade自動(dòng)持久化時(shí),會(huì)先檢查被關(guān)聯(lián)物件的id屬性,未被持久化的物件之id屬性是由unsaved-value決定,預(yù)設(shè)是null,如果您使用long這樣的原生型態(tài)(primitive type)時(shí),則必須自行指定預(yù)設(shè)值.

    例如:<id name="id" column="ROOM_ID" unsaved-value="0">
                <generator class="increment"/>
            </id>

    如果您不想額外設(shè)定unsaved-value資訊,則可以將long改為L(zhǎng)ong,這可以符合預(yù)設(shè)的unsaved-value為null的設(shè)定 .

    二、一對(duì)多進(jìn)行關(guān)聯(lián)(一間宿舍對(duì)應(yīng)多個(gè)學(xué)生)---宿舍是主體,學(xué)生是附體,關(guān)聯(lián)關(guān)系<one-to-many>在主體宿舍中設(shè)置,由于要在宿舍類中設(shè)置學(xué)生類,一個(gè)宿舍包含多個(gè)學(xué)生,所以在宿舍類中要用Set類來(lái)進(jìn)行設(shè)置,用set類(private Set users = new HashSet();)來(lái)存儲(chǔ)多個(gè)學(xué)生類,在映射宿舍類(Room)中要包含<set>這個(gè)節(jié)點(diǎn),用來(lái)與user相關(guān)聯(lián)

    例如:<set name="users" table="USER">
                <key column="ROOM_ID"/>
                <one-to-many class="onlyfun.caterpillar.User"/>
            </set>

    name:表示屬性,table:表示關(guān)聯(lián)的表名,key:表示通過(guò)什么字段進(jìn)行關(guān)聯(lián),<one-to-many>:表示關(guān)聯(lián)類。這里也可以使用cascade屬性。

    三、在表關(guān)聯(lián)的設(shè)計(jì)中,不論是一對(duì)多還是多對(duì)一,都要將關(guān)聯(lián)字段設(shè)置在多的那一方。
    例如:user表格和room表格,要將關(guān)聯(lián)字段room_id設(shè)置在user表格中。

    四、一對(duì)一進(jìn)行關(guān)聯(lián)(一個(gè)人只有一個(gè)房間,一個(gè)房間也只有一個(gè)人)。
    可以通過(guò)2中方式進(jìn)行關(guān)聯(lián):

    (1)、通過(guò)外鍵進(jìn)行關(guān)聯(lián):在多對(duì)一的例子中就是通過(guò)外鍵進(jìn)行關(guān)聯(lián)的.
    在user-room的設(shè)置中(user.hbm.xml):
    <many-to-one name="room"
                         column="ROOM_ID"
                         class="onlyfun.caterpillar.Room"
                         cascade="all"
                         unique="true"/>

    其中unique表示限制一個(gè)User有一獨(dú)有的 Room,這只是單向的,說(shuō)明一個(gè)user只有一個(gè)room.
    在room-user的設(shè)置中(room.hbm.xml):
    <one-to-one name="user"
                        class="onlyfun.caterpillar.User"
                        property-ref="room"/>
    這樣就完成了雙向的一對(duì)一關(guān)聯(lián),property-ref告訴hibernate,查詢出user并將其參考至room。
    (2)、通過(guò)主鍵進(jìn)行關(guān)聯(lián):限制兩個(gè)資料表的主鍵使用相同的值,如此一個(gè)User與Room就是一對(duì)一關(guān)係
    user.hbm.xml:
    <one-to-one name="room"
                        class="onlyfun.caterpillar.Room"
                        cascade="all"/>
    room.hbm.xml:
    <one-to-one name="user"
                        class="onlyfun.caterpillar.User"
                        constrained="true"/>

    使用constrained="true"告訴Hibernate參考至User的主鍵

    五、雙向關(guān)聯(lián),就是將一和二結(jié)合起來(lái),如果將關(guān)聯(lián)的維護(hù)交給User的話會(huì)比較容易,因?yàn)槊總€(gè)User都對(duì)應(yīng)至一個(gè)Room,在儲(chǔ)存時(shí)並用像Room一樣必須對(duì)Set中的每個(gè)物件作檢查,為了將關(guān)聯(lián)的維護(hù)交給User,我們可以在Room.hbm.xml中的<set>修改,加上inverse="true",表示將關(guān)聯(lián)的維護(hù)「反過(guò)來(lái)」交給User作

     例如:<set name="users" table="users" iinverse="true" cascade="all">
                  <key  column="room_id"/>
                  <one-to-many class="onlyfun.caterpillar.User"/>

    在設(shè)立雙向關(guān)聯(lián)時(shí),關(guān)聯(lián)由多對(duì)一中「多」的哪一方維護(hù),會(huì)比由「一」的哪一方維護(hù)來(lái)的方便,在Hibernate可以藉由inverse來(lái)設(shè)定,不設(shè)定inverse基本上也可以運(yùn)行,但是效能會(huì)較差
     
    posted on 2008-05-18 20:47 henry1451 閱讀(634) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate技術(shù)
    主站蜘蛛池模板: 亚洲精品乱码久久久久久久久久久久 | 亚洲AV永久青草无码精品| 成人免费无码大片A毛片抽搐色欲| 自拍偷自拍亚洲精品播放| 久久综合亚洲鲁鲁五月天| 在线观看亚洲天天一三视| 成人毛片免费视频| 亚洲国产精品一区二区第四页| 久久午夜夜伦鲁鲁片免费无码影视| 一级做a爰片久久毛片免费看| 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲国产精品成人精品无码区 | 免费高清在线影片一区| 91热久久免费精品99| 暖暖免费日本在线中文| 五月婷婷免费视频| 男女交性无遮挡免费视频| 色噜噜的亚洲男人的天堂| 三级毛片在线免费观看| 白白色免费在线视频| 男男gvh肉在线观看免费| 男人j进入女人j内部免费网站| 免费看国产成年无码AV片| 国产片AV片永久免费观看| 青青操免费在线视频| 人妻免费一区二区三区最新| 曰批全过程免费视频在线观看无码 | 精品国产日韩亚洲一区在线| 国产精品99精品久久免费| 日韩成人免费aa在线看| 国产精品无码免费视频二三区| 日本免费人成黄页在线观看视频| 亚洲综合av永久无码精品一区二区| 亚洲av乱码一区二区三区| 中文字幕无码精品亚洲资源网久久| 2022免费国产精品福利在线| 一个人免费视频观看在线www| 四虎国产精品免费永久在线| 日韩精品视频免费在线观看| 久久久婷婷五月亚洲97号色| 亚洲欧洲国产成人精品|