<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hibernate一對一完美版

    Posted on 2008-08-26 04:10 H2O 閱讀(646) 評論(0)  編輯  收藏 所屬分類: hibernate

    Hibernate一對一關系操作對象


    總的來說有四種方式,我將意義的在本片文章中介紹
    一:以主鍵關聯

     概念:關聯的兩個實體共享一個主鍵
    例如我們建立兩個表,分別為user id pk,name,password
                                                userinfor id pk,email,age,address
    user和userinfor共享一個主鍵id,并且兩個表是一對一關系,那么如何讓一個表引用另一個表生成的主鍵那?我們可以用hibernate的主鍵foreign機制生成。
    我們先看看user.hbm.xml文件
    .......
    <hibernate-mapping>
     <class name="model.User" lazy="true">
      <id name="id" unsaved-value="null">
       <generator class="uuid.hex"/>
      </id>
      <property name="name" type="string"/>
      <property name="password" type="string"/>
      <one-to-one name="userinfor"
           class="model.Userinfor"
           fetch="join"
           cascade="all"
           />
     </class>
    <hibernate-mapping>
    .......
        one-to-one的屬性cascade=all表示user的增刪改操作也會反映在userinfor對象當中。我們再看看userinfor.hbm.xml文件.
    <hibernate-mapping>
     <id name="id">
      <generator name="foreign">
       <param name="property">user</param>
      </generator>
     </id>
     <property name="email" column="email" type="string"/>
     <property name="age" column="age" type="int"/>
     <property name="address" column="address" type="string"/>
     <one-to-one name="user"
          class="model.User"
          constrained="true"<!-引用user的主鍵id為外鍵-->
          />
    </hibernate-mapping>
    讓我們看看java的代碼片段
    .....
    User user=new User();
    user.setName("name");
    user.setPassword("pass");
    Userinfor u=new Userinfor();
    u.setEmail("email");
    u.setAge(11);
    u.setAddress("address");
    user.setUserinfor(u);
    u.setUser(user);
    DAO.saveObj(user);
    最后打開你的數據庫舊可以看到結果了。

    二,一對一以外鍵關聯

     以外鍵關聯的概念:兩個實體各自有不同的主鍵,但是一個實體有一個外鍵引用另一個實體的主鍵。例如:
     表 user id pk,name,passeword
        userinfor id pk,uid fk,infor
     先看user.hbm.xml
     ......
     <hibernate-mapping>
     <class name="user" table="user" lazy="true">
      <id name="id" unsaved-value="null">
       <generator class="uuid.hex"/>
      </id>
      <property name="name" type="string"/>
      <property name="password" type="string"/>
      <one-to-one name="userinfor"
       class="model.Userinfor"
       fetch="join"
       cascade="all"
       />
     </class>
     </hibernate-mapping>
     可以看到這個同我們第一次用到的一樣啊
     然后我們看看userinfor.hbm.xml的結構
     .....
     <hibernate-mapping>
     <class name="userinfor" table="userinfor" lazy="true">
      <id name="id">
       <generator class="uuid.hex"/>
      </id>
      <property name="infor" column="infor" type="string"/>
      <many-to-one name="user"
        class="model.User"
        unique="true"
        <!-唯一的多對一,其實就便成了一對一了-->
        columnn="uid"
        />
     </class>
     </hibernate-mapping>
     以外鍵關聯的一對一,其實就變成了一對多的雙向關聯,編寫時直接按照一對多和多對一的要求編寫,最后在many-to-one加上unique='true'即可說明他只不過是一對多關系的一個特例。編寫java代碼:
    .......
    User u=new User();
    u.setName("name");
    u.setPassword("password");
    Userinfor ui=new Userinfor();
    ui.setInfor("infor");
    u.setUserinfor(ui);
    ui.setUser(u);
    DAO.saveObj(u);
    ......
    三:默認的級連關系

     一對多默認級連關系為預先抓取,而一對多,多對多都是立即加載
    看看user.hbm.xml
    <one-to-one name="userinfor"
      class="model.Userinfor"
      cascade="all"/>
    以上我們并沒有顯示的設置級連關系。這樣在取的userinfor時將用默認的級連關系。
    .....
    User u=(User)DAO.getByid(User.class,"字符穿,相當于where id='此值'");

    四:延遲加載

     一對一關系進行延遲加載時與其他關系不同,多對一是在class標簽中設置lazy='true',一對多和多對多是在set標簽中設置lazy=”true“,而一對一則在class標簽當中設置lazy='true'并且在one-to-one標簽當中設置constrained='true'。
     .....
     <hibernate-mapping>
     <class name="model.User" table="user">
      <one-to-one name="userinfor"
        class="model.Userinfor"
        contrained="true"
        cascade="all"
        />
     </class>
     </hibernate-mapping>
    java代碼
    ...
    User u=(User)DAO.getByid(User.class,"id");
    .....
    次代碼只是加載了user對象,而沒有加載userinfor對象,而且忽略了默認的預先抓取,(這是默認的,只有顯示的指定fatch='true'時才采用預先抓取的)

    posts - 0, comments - 21, trackbacks - 0, articles - 101

    Copyright © H2O

    主站蜘蛛池模板: 久久久久亚洲精品无码网址| 久久精品a一国产成人免费网站| 亚洲成av人片在线观看天堂无码| 亚洲日本国产综合高清| 青青青国产在线观看免费网站| 亚洲美女视频免费| 99久久免费国产香蕉麻豆 | 成人激情免费视频| 亚洲综合激情五月色一区| 最近2019中文字幕免费看最新 | 国产jizzjizz视频免费看| 相泽南亚洲一区二区在线播放| 在线观看免费国产视频| 黄色a级免费网站| 亚洲一区二区三区在线观看精品中文| 皇色在线免费视频| 精品日韩亚洲AV无码| 三年片在线观看免费大全| 亚洲欧洲无卡二区视頻| 亚洲国产成人精品久久久国产成人一区二区三区综 | 破了亲妺妺的处免费视频国产| 亚洲AV无码一区二区三区牲色| 深夜国产福利99亚洲视频| a高清免费毛片久久| 久久久亚洲精品国产| 成年网站免费视频A在线双飞| 亚洲av无码成人影院一区| 亚洲精品无码99在线观看| 13小箩利洗澡无码视频网站免费| 亚洲视频免费一区| 国产免费私拍一区二区三区| 中文字幕免费视频精品一| 亚洲国产精品久久久久秋霞影院| 在线免费观看一级毛片| 国产精品高清免费网站| 亚洲导航深夜福利| 亚洲精品成人网久久久久久| 2015日韩永久免费视频播放| 精品免费AV一区二区三区| 亚洲卡一卡2卡三卡4卡无卡三| 四虎成人精品一区二区免费网站|