posts - 68, comments - 19, trackbacks - 0, articles - 1
          1.many to one 多對一映射
          此種模型最經典的為user-->group,即站在user的角度上看,是由多個user對象屬于一個group對象。反過來的話,則是一個group對應多個user,那是一對多關系。此種映射一旦建立,能在得到user對象的時候通過對象之間的關系得到group的屬性。

          類:
          User:
          private int id;
          private String name;
          private Group group;
          Group: 
          private int id;
          private String name;

          主要映射文件:
          <class name="com.vle.domain.User" table="t_user">
            <id name="id">
             <generator class="native"/>
            </id>
            <property name="name"/>
            <many-to-one name="group" column="groupid"/>
           </class>

          得到屬性值:
          User u=(User) session.load(User.class, 1);
          System.out.print(u.getName()+"-->"+u.getGroup().getName());

          2.one2one 主鍵關聯 單向映射
          Person-->IdCard 一個人對應一個身份證,"人"引用了"身份證"的主鍵作為外鍵,同時也作為"人"這張表的主鍵。
          Person: 
          private int id;
          private String name;
          private IdCard idCard;
          IdCard:
          private int id;
          private String cardNo;

          主要映射文件:
          <class name="com.vle.domain.Person" table="t_person">
            <id name="id">
             <!-- 通過foreign得到id生成策略,foreign會得到關聯對象的標示 -->
             <generator class="foreign">
              <!-- property指的是建立關系的關聯對象,即Person中引用IdCard的idCard -->
              <param name="property">idCard</param>
             </generator>
            </id>
            <property name="name"/>
             <!-- 使用one-to-one標簽進行描述,不會改變表結構,讓hibernate加載關聯對象,默認關聯對象的主鍵作為此類的主鍵
              使用 constrained生成外鍵約束
              name:指加載對象時,通過Person指定的主鍵(也就是idCard)把IdCard的關聯加上去
              -->
            <one-to-one name="idCard" constrained="true"/>
           </class>

          3.one2one 主鍵關聯 雙向映射
          需要在IdCard對象中加入對Person的引用 
          IdCard:
          private int id;
          private String cardNo;
          private Person person;

          并且需要在IdCard.hbm.xml中加入對引用的描述:
           <class name="com.vle.domain.IdCard" table="t_idcard">
            <id name="id">
             <generator class="native"/>
            </id>
            <property name="cardNo"/>
            <one-to-one name="person"/>
           </class>

          4 one2one 唯一外鍵關聯 單向關聯
          在person中持有idcard的引用:
          private IdCard idCard;
          Person映射文件:
           <class name="com.vle.domain.Person" table="t_person">
            <id name="id">
             <generator class="native"/>
              </id>
            <property name="name"/>
            <many-to-one name="idCard" unique="true"/>
           </class>
          一對一唯一外鍵關聯可以看做多對一的一種特例,只需要在many to one標簽中將unique的屬性設置為true即可。

          5 one2one 唯一外鍵關聯 雙向關聯
          需要在IdCard中持有對Person的引用
          private Person person;
          IdCard映射文件:
           <one-to-one name="person" property-ref="idCard"/>
          將person用一對一標簽描述,并且引用了外鍵idCard。


          Feedback

          # re: Hibernate中的幾種經典對象模型和關系模型的映射(1)  回復  更多評論   

          2011-01-03 09:55 by ugg boots stores
          向左走,向右走,呵呵、、我喜歡

          # re: Hibernate中的幾種經典對象模型和關系模型的映射(1)  回復  更多評論   

          2011-01-04 12:50 by xylz
          可以畫一些圖描述一下
          主站蜘蛛池模板: 吴桥县| 房山区| 林芝县| 女性| 山阴县| 肃北| 新邵县| 香河县| 昌图县| 南雄市| 凌云县| 垫江县| 高州市| 固始县| 内黄县| 团风县| 抚远县| 博乐市| 承德县| 炉霍县| 福鼎市| 隆尧县| 和硕县| 天水市| 武陟县| 唐山市| 嵩明县| 闸北区| 年辖:市辖区| 高台县| 苏州市| 新乡市| 永仁县| 曲阳县| 翁牛特旗| 隆回县| 民县| 临高县| 佛山市| 墨脱县| 佛坪县|