hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗

                one-to-one在hibernate中可以用來作為兩張表之間的主鍵關(guān)聯(lián),這也是hibernate中主鍵關(guān)聯(lián)的一種用法,這樣在一張表中的ID,在生成另外一張表的同時回自動插入到相應(yīng)的ID字段中去,相應(yīng)的XML文件設(shè)置比較簡單,舉例如下:

              <!-- 建立一對一的到Address的映射,這個是寫在User的XML配置文件中的 -->
              <!-- 相應(yīng)的User bean(PO)中也要添加屬性 com.xx.Address  address-->
              <one-to-one name="address" cascade="all" class="com.xx.Address"/>
             
             <!-- cascade的屬性設(shè)置不再重復(fù)了,可以查看hibernate文檔 -->

              <!-- 建立一對一的到User的映射,這個是寫在Address的XML配置文件中的 -->
              <!-- 相應(yīng)的Address bean(PO)中也要添加屬性 com.xx.User user--> -->
              <one-to-one name="user" class="com.xx.User" constrained="true"/>

                為了在Address中使用User中的主鍵ID值,我們需要設(shè)置Address中的主鍵生成規(guī)則,如下所示,采用foreign關(guān)鍵字

             <id column="ID" name="id" type="long" unsaved-value="0">
                <generator class="foreign">
                  <param name="property">user</param> 
                </generator>
             </id>


                這里需要注意的是property的屬性值必須與上面到User的映射所填寫的name屬性值一致,這樣就完成了one-to-one的映射關(guān)系。

          上面的過程都很簡單,下面我來說說這里需要注意的地方:

            1.   在設(shè)置屬性ID的時候必須注意字段的長度,如筆者這樣使用oracle的sequence來生成ID,其長度有14位之長,則應(yīng)選擇hibernate類型long,對應(yīng)的實體中應(yīng)選擇Long,這樣不會出現(xiàn)溢出的情況。


            2.   在測試的時候必須要注意這兩張表之間因為已經(jīng)存在了一對一的關(guān)系,所以我們不能只寫
                   user.setAddress(address);
                   而忽略了
                   address.setUser(user);
                   這樣在做插入的時候會報出attempted to assign id from null one-to-one property: address的錯誤,這一點初學(xué)者會經(jīng)常犯,筆者也是其中之一。


           3.   如果不寫cascade="all"或者寫成cascade="none"的話,即使你寫了
                   user.setAddress(address);
                   address.setUser(user);
                 也不會發(fā)生任何事情,只有user會被存儲。

          以上是一些筆者經(jīng)歷的小經(jīng)驗,如果有不對的地方歡迎指正。

          posted on 2005-03-23 17:27 Find it, try it, experience it 閱讀(10002) 評論(9)  編輯  收藏

          評論

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2005-03-30 09:34 baijsp

          您說的最上面的那兩個映射文件
          <one-to-one name="address" cascade="all" class="com.xx.Address"/>

          <one-to-one name="user" class="com.xx.User" constrained="true"/>
          分別對應(yīng)的是那個映射文件呀?第一個是address的嗎?還是user的。講的不太明白。我試過了你的這個例子,沒有實現(xiàn)這種關(guān)系的映射  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2005-03-30 12:20 一個人的日子,我獨來獨往

          我已經(jīng)在例子中用紅色的標(biāo)記進行了標(biāo)記,希望對你能有所幫助,另外我的QQ 9809973,還有什么問題聯(lián)系我  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2005-04-13 08:47 4431

          你是一個人嗎,需要人和你一起學(xué)習(xí)嗎  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2005-04-13 15:21 一個人的日子,我獨來獨往

          qq:9809973  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2005-05-13 16:24 Jun Tsai

          能不能把你的保存User時候的代碼拿來看看?
          謝謝  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2008-05-09 18:29 xx

          級聯(lián)刪除會嗎?  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2008-08-26 17:34 z60010232

          受用了,謝謝  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗[未登錄] 2009-05-10 09:15

          太強了,非常感謝。我看了上面的講述。問題解決了。謝謝  回復(fù)  更多評論   

          # re: hibernate:one-to-one的學(xué)習(xí)小經(jīng)驗 2009-05-15 11:28 jj

          不知道one-to-many能不能自動存儲  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計

          公告

          If there is any question you have, please don't hesitate, let me know ASAP, you can find me at kenees@gmail.com or QQ: 9808873, hope to make friends with you ;)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定南县| 类乌齐县| 赤水市| 永昌县| 尼玛县| 灵台县| 棋牌| 蒙自县| 富川| 同心县| 澎湖县| 潜江市| 利辛县| 邹城市| 洞头县| 永平县| 望江县| 嘉义县| 泰顺县| 巴塘县| 潞城市| 东方市| 怀仁县| 老河口市| 迁西县| 邯郸县| 东山县| 扶沟县| 眉山市| 称多县| 台东县| 井陉县| 油尖旺区| 许昌市| 祁东县| 五河县| 正定县| 阳东县| 阳春市| 集安市| 收藏|