<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

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

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

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

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

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

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

    如果您不想額外設定unsaved-value資訊,則可以將long改為Long,這可以符合預設的unsaved-value為null的設定 .

    二、一對多進行關聯(lián)(一間宿舍對應多個學生)---宿舍是主體,學生是附體,關聯(lián)關系<one-to-many>在主體宿舍中設置,由于要在宿舍類中設置學生類,一個宿舍包含多個學生,所以在宿舍類中要用Set類來進行設置,用set類(private Set users = new HashSet();)來存儲多個學生類,在映射宿舍類(Room)中要包含<set>這個節(jié)點,用來與user相關聯(lián)

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

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

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

    四、一對一進行關聯(lián)(一個人只有一個房間,一個房間也只有一個人)。
    可以通過2中方式進行關聯(lián):

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

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

    五、雙向關聯(lián),就是將一和二結合起來,如果將關聯(lián)的維護交給User的話會比較容易,因為每個User都對應至一個Room,在儲存時並用像Room一樣必須對Set中的每個物件作檢查,為了將關聯(lián)的維護交給User,我們可以在Room.hbm.xml中的<set>修改,加上inverse="true",表示將關聯(lián)的維護「反過來」交給User作

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

    在設立雙向關聯(lián)時,關聯(lián)由多對一中「多」的哪一方維護,會比由「一」的哪一方維護來的方便,在Hibernate可以藉由inverse來設定,不設定inverse基本上也可以運行,但是效能會較差
     
    posted on 2008-05-18 20:47 henry1451 閱讀(642) 評論(0)  編輯  收藏 所屬分類: Hibernate技術
    主站蜘蛛池模板: 亚洲色成人网站WWW永久四虎| 亚洲午夜在线电影| 国产亚洲日韩在线a不卡| 在线免费观看污网站| 美国免费高清一级毛片| 永久中文字幕免费视频网站| 四虎免费永久在线播放| 亚洲国产精品va在线播放| 国产VA免费精品高清在线| 亚洲色婷婷六月亚洲婷婷6月 | 亚洲欧美成aⅴ人在线观看| 一个人免费高清在线观看 | 国产亚洲精品美女久久久久| 日韩人妻无码免费视频一区二区三区| 亚洲乱亚洲乱妇无码| www国产亚洲精品久久久日本| av片在线观看永久免费| 亚洲a在线视频视频| 可以免费看黄的网站| 亚洲色大成WWW亚洲女子| 亚洲午夜无码片在线观看影院猛| 久久99精品免费一区二区| 九九精品免费视频| 青青青亚洲精品国产| 2048亚洲精品国产| 57pao一国产成视频永久免费| 亚洲日本久久久午夜精品| 亚洲精品无码AV中文字幕电影网站| 中文字幕无码免费久久9一区9| 亚洲一区二区三区电影| 免费的一级片网站| 中国在线观看免费的www| 亚洲最大黄色网址| 精品一区二区三区免费毛片爱| youjizz亚洲| 亚洲人妻av伦理| 182tv免费观看在线视频| 国产成人高清亚洲一区久久| 亚洲乱码中文字幕综合| 久久久高清免费视频| 4hu四虎免费影院www|