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

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 828320
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

            一對一關系在實際生活中是比較常見的,如果學生與身份證的關系,學生與檔案的關系等等。
            一對一關系在Hibernate中的實現有兩種方式,分別是主鍵關聯外鍵關聯

          以主鍵關聯

            主鍵關系的重點是:關聯的兩個實體共享一個主鍵值。
          Student.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Student" table="student" lazy="true"><!--把類和表關聯起來-->
            <id name="id" unsaved-value="null"><!--id的產生方式是uuid.hex-->
             <generator class="uuid.hex"/>
            </id>
            <property name="name" type="sring"/>
            <one-to-one name="cer"
              class="model.Certificate"
              fetch="join"
              cascade="all"
            /><!--映射對應的身份證對象-->
           </class>
          </hibernate-mapping>

          Certificate.hbm.xml
          ...
          <hibernate-mapping>
           <class name="model.Certificate" table="certificate" lazy="true">
            <id name="id">
            <!--外鍵生成機制,引用stu對象的主鍵作為certificate數據表的主鍵和外鍵-->
             <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>

          上述的兩個配置文件在<one-to-one>標簽中都沒有設置column屬性
          (實際上<one-to-one>標簽本身就沒有column屬性)。


          以外鍵關聯

            以外鍵關聯的重點是:兩個實體各自有不同的主鍵,但其中一個實體有一個外鍵引用
          了另一個表的主鍵。

          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"
            /><!--映射對應的身份證對象-->
           </class>
          </hibernate-mapping>
          可以看到Student.hbm.xml和以主鍵關聯時的代碼是一樣的,并沒有改變。

          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" <!--唯一的多對一,其實也就變成了一對一關系-->
              column="stu_id" 
            />

           </class>
          </hibernate-mapping>
          以外鍵關聯的一對一,其實本質上變成了一對多的雙向關聯了,編寫時直接
          按照一對多和多對一的要求編寫,最后在many-to-one這一邊上加上一個
          unique="true"即可。



          posted on 2007-12-29 14:00 Ke 閱讀(1771) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 海城市| 临沧市| 晋宁县| 罗江县| 塘沽区| 石阡县| 丰镇市| 垣曲县| 富平县| 勃利县| 团风县| 玉环县| 襄樊市| 油尖旺区| 泰和县| 洪泽县| 县级市| 赣榆县| 陇川县| 永城市| 古丈县| 双牌县| 聊城市| 扎兰屯市| 垫江县| 新蔡县| 固始县| 元江| 且末县| 桃源县| 香港 | 赣榆县| 六枝特区| 北碚区| 宿迁市| 竹山县| 周至县| 景宁| 平原县| 陆川县| 东光县|