【SSH】——Hibernate(5)关联映射之双向映射

      在上一篇文章【SSH】——Hibernate(4)关联映射之单项映射中,介绍了关联映射的单向映射,今天通过hbm.xml配置文件来介绍一下关联映射的双向映射


      一)一对一关联映射

      对比单向一对一映射,需要在IdCard加入<one-to-one>标签,它不影响,只影响加载。如下图:


                        

      双向一对一主键映射关键映射代码——在IdCard端新加入如下标签映射:       

<one-to-one name="person"/>  

  
      双向一对一唯一外键映射关键映射代码——在IdCard端新加入如下标签映射:
     采用<one - to-one>标签映射,并需指定其中的property-ref属性为关系字段的名称。

<one-to-one name="person"property-ref="idCard"/>  

      二)多对一关联映射

      该映射主要是为了解决一对多单向关联的缺陷,并非业务需求导致的。 
      在一的一端的集合上采用标签,并用标签。在多的一端加入一个外键,同时在多的一端采用标签。

      Hbm.xml文件配置:
      student(多的一端)

<many-to-one name="classes" column="classesid"/> 


       classes(一的一端)


<set name="students"inverse="true">  
     <key column="classesid"/>  
     <one-to-many class="com.hibernate.Student"/>  

</set>

      PS:inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为false表示本端可以维护关系,如果inverse为true,则本端不能维护关系,会交给另一端维护关系,本端失效。所以一对多关联映射我们通常在多的一端维护关系,让一的一端失效。inverse是控制方向上的反转,只影响存储。


      三)多对多关联映射

      在实际中到底是采用单向映射还是采用双向映射都是根据具体的需求,看是不是需要从一端把另一端加载出来,同时也从另一端把对方加载出来。 
      两端都添加 many-to-many>的标签映射。不过要注意,两端生成的中间表名称和字段都必须一致。
                            

      Hbm.xml文件配置:
      role端:

<set name="users" table="t_user_role">  
    <key column="role_id"/>  
    <many-to-many class="com.hibernate.User" column="user_id"/>  

</set> 


      user端:

<set name="roles" table="t_user_role">  
   <key column="user_id"/>  
   <many-to-many class="com. hibernate.Role" column="role_id"/>  
</set> 

      总结:
      在上篇文章中,已经谈到单向的关联映射,可以和本文的双向关联映射对比,在实际应用中选择合适的策略

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值