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>

三、一对一

  • 在任意一张表中引入对方的主键作为外键(开发使用非常少)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值