paulwong

          HIBERNATE中的對象設(shè)計(jì)

          zRoom與User存在一對多的關(guān)系,如果要在取得Room的同時(shí)取得User,則在Room中加入Set,List或Map類型的集合成員,Set中的元素不可以重復(fù),List中的元素可以重復(fù),Map是鍵值對類型的集合。

          在HIBERNATE的配置文件中象這樣配置:


          <set name="users" table="user" cascade="all"  inverse="true"  lazy="extra">
                      
          <key column="room_id"/>
                      
          <one-to-many class="paul.com.User"/>
          </set>

          1. 指定users私有成員的類型為SET:set name="users"
          2. 指定集合中的對象類型為User:<one-to-many class="paul.com.User"/>
          3. 指定User對應(yīng)的表:table="user"
          4. 指定外鍵:<key column="room_id"/>
          5. 指定如果同時(shí)新增、修改、刪除關(guān)聯(lián)的Room和User對象時(shí),是否需要HIBERNATE執(zhí)行兩次操作:cascade="all"
          6. 指定 lazy="extra"時(shí),則集合中的元素不會(huì)被一起取出,而且要讀SIZE時(shí),只會(huì)發(fā)送一條COUNT的SQL語句至后臺(tái)
          7. 指定 inverse="true"時(shí),當(dāng)保存一的對象時(shí),對應(yīng)的多的對象不會(huì)同時(shí)被保存。

          如果要在取得User對象的同時(shí)取得Room對象,則在User中加入私有成員Room,在HIBERNATE的配置文件中如下配置:


          <many-to-one name="room" 
                       column
          ="room_id"
                       class
          ="paul.com.Room"
                       cascade
          ="all"
                       outer-join
          ="true"/> 

          1. 指定名稱為room成員的類型:many-to-one name="room"
          2. 指定room對應(yīng)的類名:class="paul.com.Room"
          3. 指定外鍵:column="room_id"
          4. 指定如果同時(shí)新增、修改、刪除關(guān)聯(lián)的Room和User對象時(shí),是否需要HIBERNATE執(zhí)行兩次操作:cascade="all"
          5. 指定關(guān)聯(lián)兩個(gè)表時(shí)的查詢是否使用left-outer關(guān)鍵字:outer-join="true"
          User和Server是多對多的關(guān)系,如要在取得User對象的同時(shí)取得Server,可以User中加入Set私有成員,在HIBERNATE中如下配置:


          <set name="servers" 
                       table
          ="user_server" 
                       cascade
          ="save-update"> 
           
                      
          <key column="user_id"/> 
                      
          <many-to-many class="paul.com.Server"
                                    column
          ="server_id"/> 
          </set>

          1. 指定名稱為servers的私有成員的類型為SET:set name="servers"
          2. 指定中間表為:table="user_server"
          3. 指定User表與中間表關(guān)聯(lián)的外鍵:key column="user_id"
          4. 指定集合中的對象類型為:many-to-many class="paul.com.Server"
          5. 指定中間表與Server關(guān)聯(lián)的外鍵:column="server_id"
          6. 指定如果同時(shí)新增、修改、刪除關(guān)聯(lián)的Room和User對象時(shí),是否需要HIBERNATE執(zhí)行兩次操作:cascade="save-update"

          如此配置后,將大量減少SQL語句的撰寫。

          posted on 2009-05-01 11:57 paulwong 閱讀(444) 評(píng)論(0)  編輯  收藏 所屬分類: HIBERNATE

          主站蜘蛛池模板: 昔阳县| 马鞍山市| 定日县| 商南县| 丰台区| 三明市| 皮山县| 磐安县| 陕西省| 长兴县| 米易县| 宜君县| 新沂市| 漠河县| 金寨县| 永顺县| 黎平县| 武威市| 望都县| 报价| 乌拉特中旗| 梁平县| 苍梧县| 鄂州市| 信阳市| 富裕县| 乌拉特中旗| 长治县| 龙州县| 沛县| 宕昌县| 乐昌市| 大兴区| 饶平县| 高淳县| 汤阴县| 外汇| 南乐县| 上思县| 历史| 金坛市|