想飛就別怕摔

          大爺?shù)牟M罵人

          Hibernate學(xué)習(xí)(二) ---【一對一主鍵單向關(guān)聯(lián)】

          為了簡潔,我們創(chuàng)建兩張表分別是Student和Certificate,它們只有主鍵ID和另外一個對象的引用標(biāo)識符。從student可以加載certificate。單向
          Certificate Student.getCer();//返回Certificate對象
          Student Certificate.gerStu();//返回Student對象

          1.主鍵關(guān)聯(lián)
          所謂以主鍵關(guān)聯(lián),是指兩張數(shù)據(jù)庫表通過主鍵取得一對一的關(guān)聯(lián)關(guān)系,也就是說一張表的主鍵是引用另一張表的外鍵。例如,對于Student和Certificate對象,一般來說是Student是主體,Certificate對象依附Student存在。它們主鍵關(guān)聯(lián)的一對一關(guān)系就是在數(shù)據(jù)庫中Student和Certificate表使用相同的主鍵值,這個由Student對象生成。Certificate應(yīng)用這個主鍵值。它們共享同一主鍵值,這通過在Certificate表中設(shè)置外鍵來實現(xiàn)。一對一主鍵關(guān)聯(lián)映射中默認(rèn)cascade="true";
          2.一對一以主鍵關(guān)聯(lián)的使用
          既然它們是共用一個主鍵值,關(guān)鍵是如何讓另一張表引用已經(jīng)生成的主鍵值。這在Hibernate中使用的是主鍵的foreign生成機制。
          下面是Student和Certificate類的配置源碼。
          Student.hbm.xml
          <hibernate-mapping>
              
          <class name="model.Student" table="student" lazy="true"><!--把類數(shù)表關(guān)聯(lián)起來-->
                  
          <id name="id" unsaved-value="null"><!--id的產(chǎn)生方式是uuid.hex-->
                      
          <generator class="uuid.hex" />
                  
          </id>
                  
          <property name="name" type="String"><!--映射學(xué)生名-->
                  
          <property name="carId" type="String"><!--映射映射號-->
                  
          <property name="age" type="int"><!--映射學(xué)生年齡-->
                  
          <one-to-one name="cer"
                   class
          ="model.Certificate"
                   fetch
          ="join" cascade="all" constrained="true"/><!--映射文件的身份證對象-->
               
          </class>
          </hibernate-mapping>

          以上的one-to-one設(shè)置為cascade="all",表示增加、刪除、及修改Student對象時,都會級聯(lián)增加、刪除、修改Certificate對象。
          constrained="true"約束這句話也要加上
          Certificate.hbm.xml
          <hibernate-mapping>
              
          <class name="model.Certificate" table="certificate" lazy="true"><!--把類數(shù)表關(guān)聯(lián)起來-->
                  
          <id name="id">
          <!--外鍵生成機制,引用stu對象的主鍵作為certificate數(shù)據(jù)表的主鍵和外鍵-->
                      
          <generator class="foreign">
                           
          <param name="property">stu</param>
                      
          </genetator>
                  
          </id>
                  
          <property name="describe" column="describe"type="String">
               
          </class>
          </hibernate-mapping>
          上述的兩個配置文件在one-to-one中都沒有設(shè)置column屬性(其實他本身就沒有column屬性)。兩個表是通過主鍵值得以連接的。現(xiàn)在建立一個學(xué)生和身份證對象,將他們設(shè)置為一對一關(guān)聯(lián)存入數(shù)據(jù)庫。
              //建立身份證
              Certificate cer = new Certificate();
              cer.setDescribe(
          "spark");
              
          //新建學(xué)生
              Student stu = new Student();
              stu.setName(
          "spark");
              stu.setCardid(
          "10001");
              stu.setAge(
          22);
              
          //設(shè)置學(xué)生和身份證之間的關(guān)聯(lián)
              stu.setCer(cer);
              StudentDAO.saveObj(stu);

          posted on 2008-07-24 12:42 生命的綻放 閱讀(1856) 評論(0)  編輯  收藏 所屬分類: Hibernate

          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(5)

          隨筆分類(94)

          隨筆檔案(93)

          文章分類(5)

          文章檔案(5)

          相冊

          JAVA之橋

          SQL之音

          兄弟之窗

          常用工具下載

          積分與排名

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 武义县| 北川| 潢川县| 濮阳县| 垫江县| 永顺县| 调兵山市| 阿鲁科尔沁旗| 鄂托克前旗| 钟山县| 三台县| 巴塘县| 台中县| 方正县| 什邡市| 泌阳县| 隆安县| 华容县| 商丘市| 虹口区| 务川| 咸阳市| 象州县| 东台市| 墨竹工卡县| 墨玉县| 昌邑市| 寻甸| 南丰县| 仁怀市| 平阳县| 石渠县| 古交市| 新余市| 万源市| 玉树县| 大同县| 九龙城区| 荥阳市| 湖南省| 申扎县|