隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 829319
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

            一對多和多對一關系在實際生活中是非常常見的。在編寫程序時,有兩種實現的形式
          分別是單向關聯和雙向關聯。

          單向關聯

          雙向關聯

            本節中使用到兩個類,分別是班級(Team)和學生(Student),學生和班級之間是多對一
          關系。
          具體的關聯實現源代碼如下:
          Student.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Student" table="student">
            <id name="id" unsaved-value="null">
             <generator class="uuid.hex"/>
            </id>
            <property name="name" type="string'/>
            <many-to-one name="team"
              class="model.Team"
              column="team_id" <!--和team發生關聯的列名-->
              cascade="none"
              fetch="join"
            />

           </class>
          </hibernate-mapping>

          <many-to-one>標簽具有column屬性,column屬性總是和關聯類(對于Student來說,關聯類
          是Team)的主鍵id 相對應,因此Hibernate會根據student表中的team_id,根據Team表中設置
          的id列(一般情況列名也叫id),取出team.id=student.team_id的記錄,構造成Team對象返
          回給Student類。

          Team.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Team" table="team" lazy="true">
            <id name="id" unsaved-value="null">
             <generator class="uuid.hex"/>
            </id>
            <property name="teamName" type="string"/>
            <set name="students" cascade="save-update" lazy="true" inverse="true">
             <key column="team_id"/>
             <one-to-many class="model.Student"/>
            </set>

           </class>
          </hibernate-mapping>

          Team對Student是一對多關系,一對多具有<key column=""/>屬性,key標簽總是和本身類的主鍵
          相對應。在取得Team對象時,通過Team的主鍵id與Student表中的team_id進行匹配,如果
          team.id=student.team_id,則認為此學生是本班級的,于是加載學生,把學生對象加入Team
          對象的學生集合。

          設置inverse標簽
            由于在Team.hbm.xml中設置了inverse="true",Team和Student之間的關系轉由Student來維護
          因此,當Team掌握維護權時(inverse="false"或者默認狀態),它負責將自己的id告訴Student
          ,然后Hibernate發送update語句去更新記錄。但現在設置了inverse="true"之后,維護權在
          Student手中,于是Hibernate不再發送update語句,而由Student自動去取得team_id,而這個
          動作其實就是完成一個“學生添加班級”動作,也就是語句newStu.setTeam(team)。



          posted on 2007-12-29 14:32 Ke 閱讀(2534) 評論(3)  編輯  收藏 所屬分類: hibernate

          FeedBack:
          # re: 一對多、多對一關聯關系的使用[未登錄] 2008-02-16 09:46 javaboy
          頂 ! 寫的太經典了 !   回復  更多評論
            
          # re: 一對多、多對一關聯關系的使用 2008-09-23 09:40 fyx
          寫的挺好的   回復  更多評論
            
          # re: 一對多、多對一關聯關系的使用 2008-09-24 15:21 ww13515517287@126.com
          不錯啊
          通俗易懂
          謝了  回復  更多評論
            
          主站蜘蛛池模板: 石棉县| 建瓯市| 广德县| 龙山县| 莱芜市| 鄱阳县| 武夷山市| 永川市| 潮安县| 温宿县| 侯马市| 乐山市| 嘉黎县| 和田市| 遵化市| 木里| 包头市| 莫力| 沁源县| 昌平区| 焉耆| 华蓥市| 丰顺县| 武定县| 株洲县| 佛教| 丘北县| 田阳县| 顺平县| 凭祥市| 滦平县| 商水县| 广河县| 龙江县| 古丈县| 冕宁县| 琼中| 额济纳旗| 奇台县| 环江| 依兰县|