Hibernate 一對一、一對多、多對多的關係映射

一、一對多(1...n)

  • 在多的一方,添加一的一方的主鍵作爲外鍵。

        過程:與單表操作不同的是,兩個表中通過外鍵關聯,因此在實體類的創建、配置**.hbm.xml文件都會發生變化

  • 實體類的創建,與單表操作不同的是

         一的一方(放置多的一方的集合)                                                  多的一方(放置一的一方的對象)

         Class A(){                                                                              Class B(){

                 Set<B> bs = new HashSet<B>() ;                                       A   a;

          }                                                                                                 }

  • **.hbm.xml文件配置     

   ①一的一方配置

        <!--配置一對多的映射:放置多的一方的集合-->
        <!--
                   set標籤:
                   name:多的一方的對象集合的屬性名稱
                   cascade :級聯操作
                   inverse : 在一的一方  放棄外鍵維護權
                      一對多關聯修改的時候
                   key標籤:
                   column:多的一方的外鍵名
                   one-to-many
                   class :一的一方類的全路徑
        -->
        <set name="linkMans" cascade="save-update" inverse="false">
            <key column="lkm_cust_id"/>
            <one-to-many class="com.jjxy.hibernate.LinkMan" />
        </set>

   ②多的一方配置 

 <!--配置一對多的關係:放置是一方的對象-->
        <!--
               many-to-one標籤
                  name  :一的一方對象的屬性名稱
                  class :一的一方類的全路徑
                  column:在多的一方表的外鍵名稱
        -->
 <many-to-one name="customer" cascade="save-update" column="lkm_cust_id" 
                                                  class="com.jjxy.hibernate.Customer"/>
    

二、多對多

  • 產生中間表,引入兩張表的主鍵作爲外鍵,兩個主鍵成爲聯合主鍵。
  • 實體類的創建,與單表操作不同的是

          一的一方(放置多的一方的集合)                                                  多的一方(放置一的一方的對象)

         Class A(){                                                                              Class B(){

                 Set<B> bs = new HashSet<B>() ;                                        Set<A> as = new HashSet<A>() ;

          }                                                                                                  }

  •  **.hbm.xml文件配置           

    ①A的一方配置   

        <!--建立與角色多對多的關係-->
        <!--   set
               name   : 對方集合的屬性
               table  :多對多所需要的中間表
        -->
        <set name="users" table="sys_user_role" inverse="true">
        <!--    key
                column     :當前對象所需中間表的外鍵名稱
        -->
        <key column="role_id"/>
        <!-- many-to-many
             class   : 對方類的全路徑
             column  :對方表在中間表中的外鍵名稱
        -->
        <many-to-many class="com.jjxy.hibernate.User" column="user_id" />

   ② B的一方的配置(與A的一方的配置相反)

        <!--建立與角色多對多的關係-->
        <!--   set
               name   :對方集合的屬性
               table  :多對多所需要的中間表
        -->
        <set name="roles" table="sys_user_role" cascade="save-update">
            <!--    key
                    column     :當前對象所需中間表的外鍵名稱
            -->
            <key column="user_id"/>
            <!-- many-to-many
                 class : 對方類的全路徑
                 column  :對方表在中間表中的外鍵名稱
            -->
            <many-to-many class="com.jjxy.hibernate.Role" column="role_id" />
        </set>

三、一對一

  • 在任意一張表中引入對方的主鍵作爲外鍵(開發使用非常少)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章