1:主外键:两表关联

<!-- 利用一对多关系加载ras属性值 -->

<set name="ras">

<!--指定关联外键字段,

将来拿外键与当前主键对等-->

<key column="user_id"/>

<one-to-many class="ReceiveAddress"/>

</set>

<!-- 利用多对一关联加载相关user信息 -->

<!-- 

<property name="userId" type="integer">

<column name="user_id"></column>

</property>

-->变为

      <many-to-one name="user" 

class="User" column="user_id">

</many-to-one>


           2:多对多:d_category_product为中间表

            <!-- 利用多对多关系加载pros集合 -->

        <set name="pros" order-by="id"

        table="d_category_product">

        <key column="cat_id"></key>

        <many-to-many column="product_id"

        class="com.tarena.pojo.Product">

        </many-to-many>

        </set>


          <!-- 利用多对多加载cats集合 -->

        <set name="cats" 

        table="d_category_product">

        <key column="product_id"></key>

        <many-to-many column="cat_id" 

        class="com.tarena.pojo.Category">

        </many-to-many>

        </set>

            3.继承关系映射

              *1)父类和子类都有对应的表,使用<joined-subclass>定义继承关系,使用步骤如下

          a.将父表和子表生成单表的基本映射

          b.将子类添加extends父类

          c.利用<joined-subclass>定义子类映射

                从Hibernate3.0版本开始,可以将<joined-subclass>单独取出,放到一个hbm.xml中定义.格式如下

          <hibernate-mapping>

            <joined-subclass name="子类类型" 

                             extends="父类类型"

                             table="子类表">

              <key column="子类表关联字段"/>

              //property字段映射

           </joined-subclass>

         </hibernate-mapping>

          Hibernate3.0版本之前,需要下面格式

         <hibernate-mapping>

           <class name="父类类型" table="父类表">

       //id主键映射

               //父类property映射

             <joined-subclass name="子类类型" 

                             extends="父类类型"

                             table="子类表">

              <key column="子类表关联字段"/>

              //property字段映射

            </joined-subclass>

          </class>

         </hibernate-mapping>

              *2)父类和子类使用同一张数据表

              选择题:

              编号,题目,难度,选项,选择答案

             简答题:

             编号,题目,难度,简答答案

             数据表Question

             编号,题目,难度,选项,选择答案,简答答案,题目类型

               使用<subclass>定义子类映射,具体步骤:

         a.修改实体类,定义成父类和子类的结构

         b.在映射文件中定义映射

         <hibernate-mapping>

           <class name="父类型" table="数据表">

               //定义父类中属性的映射

           <discriminator column="区分字段"/>

           <subclass name="子类1" 

                   discriminator-value="区分值">

                //定义子类1中属性的映射

           </subclass>

           <subclass name="子类2" 

                   discriminator-value="区分值">

                //定义子类2中属性的映射

           </subclass>

           </class>

        <hibernate-mapping>

           4.其他映射

             *1).组件映射

              目的:代码重复利用组件,减少冗余性.

      <class>

                //...主键和属性映射

       <component name="组件属性名" class="组件类型">

               //组件子属性的映射property

       </component>

      </class>

            *2).联合主键映射

             目的:两个或两个以上字段充当主键

     <class>

      <composite-id id="主属性名" class="类型">

        <key-property name="子属性1" type="" 

                 column="主键字段1">

        </key-property>

        <key-property name="子属性2" type="" 

                 column="主键字段2">

        </key-property>

      </composite-id>

               //其他普通属性和字段映射

    </class>