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
          可以畫一些圖描述一下
          主站蜘蛛池模板: 瓮安县| 化州市| 东阳市| 新营市| 赞皇县| 定襄县| 陆良县| 泗洪县| 安顺市| 清苑县| 永福县| 开江县| 陆良县| 汶川县| 湘潭县| 石渠县| 潢川县| 莆田市| 徐汇区| 青州市| 陈巴尔虎旗| 昔阳县| 乐都县| 张家界市| 会泽县| 余姚市| 普定县| 安图县| 永平县| 建昌县| 册亨县| 庆元县| 久治县| 土默特右旗| 碌曲县| 勃利县| 江西省| 洛阳市| 孝感市| 郁南县| 阳江市|