<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 閱讀(642) 評論(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

    主站蜘蛛池模板: 亚洲真人日本在线| 日韩欧美一区二区三区免费观看| 四虎影视久久久免费观看| 亚洲成av人片天堂网无码】| 亚洲综合在线一区二区三区 | 97热久久免费频精品99| 久久精品毛片免费观看| 最近2018中文字幕免费视频| 久久w5ww成w人免费| 亚洲一区二区免费视频| 免费在线观看h片| 黄页网站在线看免费| 在线免费观看污网站| 国产精品美女自在线观看免费 | 久久狠狠躁免费观看2020| 久久久久久免费一区二区三区| 国内精品免费在线观看| 久久免费精品一区二区| 99在线热视频只有精品免费| 最近2018中文字幕免费视频| 黄页网站免费观看| 四虎影视www四虎免费| 免费a级毛片在线观看| 亚洲一区二区三区无码影院| 亚洲成a人片在线观看无码| 亚洲精品免费在线观看| 亚洲午夜精品在线| 亚洲人成欧美中文字幕| 国产亚洲视频在线观看| 国产精品免费看久久久香蕉| 无码人妻精品中文字幕免费| 国产精品视频免费观看| 精品国产免费观看久久久| 亚洲av区一区二区三| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久久久久久久久免免费精品| 美女视频黄的免费视频网页 | 美美女高清毛片视频黄的一免费| 国产高潮久久免费观看| 免费人成视频在线观看网站| 成年女人毛片免费观看97|