隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊(cè)

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827659
          • 排名 - 49

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

            一對(duì)一關(guān)系在實(shí)際生活中是比較常見(jiàn)的,如果學(xué)生與身份證的關(guān)系,學(xué)生與檔案的關(guān)系等等。
            一對(duì)一關(guān)系在Hibernate中的實(shí)現(xiàn)有兩種方式,分別是主鍵關(guān)聯(lián)外鍵關(guān)聯(lián)

          以主鍵關(guān)聯(lián)

            主鍵關(guān)系的重點(diǎn)是:關(guān)聯(lián)的兩個(gè)實(shí)體共享一個(gè)主鍵值。
          Student.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Student" table="student" lazy="true"><!--把類和表關(guān)聯(lián)起來(lái)-->
            <id name="id" unsaved-value="null"><!--id的產(chǎn)生方式是uuid.hex-->
             <generator class="uuid.hex"/>
            </id>
            <property name="name" type="sring"/>
            <one-to-one name="cer"
              class="model.Certificate"
              fetch="join"
              cascade="all"
            /><!--映射對(duì)應(yīng)的身份證對(duì)象-->
           </class>
          </hibernate-mapping>

          Certificate.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Certificate" table="certificate" lazy="true">
            <id name="id">
            <!--外鍵生成機(jī)制,引用stu對(duì)象的主鍵作為certificate數(shù)據(jù)表的主鍵和外鍵-->
             <generator class="foreign">
              <param name="property">stu</param>
             </generator>

            </id>
            <one-to-one name="stu"
              class="model.Student"
              constrained="true" <!--表示Certificate引用了stu的主鍵作為外鍵-->
            />
           </class>
          </hibernate-mapping>

          上述的兩個(gè)配置文件在<one-to-one>標(biāo)簽中都沒(méi)有設(shè)置column屬性
          (實(shí)際上<one-to-one>標(biāo)簽本身就沒(méi)有column屬性)。


          以外鍵關(guān)聯(lián)

            以外鍵關(guān)聯(lián)的重點(diǎn)是:兩個(gè)實(shí)體各自有不同的主鍵,但其中一個(gè)實(shí)體有一個(gè)外鍵引用
          了另一個(gè)表的主鍵。

          Student.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Student" table="student" lazy="true">
            <id name="id" nusaved-value="null">
             <generator class="uuid.hex"/>
            </id>
            <property name="name" type="sring"/>
            <one-to-one name="cer"
              class="model.Certificate"
              fetch="join"
              cascade="all"
            /><!--映射對(duì)應(yīng)的身份證對(duì)象-->
           </class>
          </hibernate-mapping>
          可以看到Student.hbm.xml和以主鍵關(guān)聯(lián)時(shí)的代碼是一樣的,并沒(méi)有改變。

          Certificate.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Certificate" table="certificate" lazy="true">
            <id name="id">
             <generator class="uuid.hex"/> <!--不再是foreign了-->
            </id>
            <many-to-one name="stu"
              class="model.Student"
              unique="true" <!--唯一的多對(duì)一,其實(shí)也就變成了一對(duì)一關(guān)系-->
              column="stu_id" 
            />

           </class>
          </hibernate-mapping>
          以外鍵關(guān)聯(lián)的一對(duì)一,其實(shí)本質(zhì)上變成了一對(duì)多的雙向關(guān)聯(lián)了,編寫時(shí)直接
          按照一對(duì)多和多對(duì)一的要求編寫,最后在many-to-one這一邊上加上一個(gè)
          unique="true"即可。



          posted on 2007-12-29 14:00 Ke 閱讀(1770) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 马尔康县| 福贡县| 渭源县| 澄迈县| 高青县| 云梦县| 子洲县| 武清区| 中西区| 凤山县| 昂仁县| 柘城县| 金山区| 顺义区| 石屏县| 合阳县| 大姚县| 南江县| 诸城市| 渭源县| 偏关县| 庐江县| 林州市| 钟山县| 慈溪市| 巴彦淖尔市| 达日县| 综艺| 东丰县| 南召县| 德兴市| 汶川县| 秭归县| 手游| 咸宁市| 巴马| 江津市| 沾化县| 闽清县| 云安县| 商洛市|