1、单向多对一和双向多对一的区别?

只需要从一方获取另一方的数据时 就使用单向关联
双方都需要获取对方数据时 就使用双向关系

部门--人员

使用人员时
如果只需要获取对应部门信息(user.getdeptarment())
不需要 从部门下的人员信息时,就配置成单向 多对一

使用部门时
如果只需要获取部门下人员信息(deptartmanet.getusers())
不需要 从人员获取部门信息时,就配置成单向 一对多

既要获取部门下人员 deptartmanet.getusers()
又要从人员获取部门信息 user.getdeptarment()

那就 配置成双向一对多,也就是双向多一

看需求来配置了。

 

2、策略

关联关系的本质是将关联关系映射到数据库中。关联关系在对象模型中体现为内存中的一个或多个引用。  一对多关系: 一对多关系 分为“单向一对多/多对一关系”和“双向多对一”关系。
    • “单向一对多/多对一关系”只需在“一”/“多”方进行配置,
    • “双向多对一关系”需要在关联双方均加以配置。 双向多对一关联就是在多方和一方都进行配置,并在“一” 方通过属性inverse="true"设置控制关系反转
    注:单向多对一关联是最常见的单向关联关系。
    注:双向多对一关联是最常见的双向关联关系。双向多对一关联实际上是“多对
一”与“一对多”关联的组合。
 
多对一及一对多关联映射的区别(单向):
不管多对一还是一对多,都是在"多"的一端添加一个外键指向"一"的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。
 
 
模型:一个用户组(group)对应多个用户(user)。
 
多对一关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为多到一的关系,如:当载入一个用户(user)时将会同时载入组(group)的信息。它的关系映射将写在多的一端(user):    
 <many-to-one name="group" column="relatedGroup" cascade="all" />    此时它在多的一端(user)添加了一个外键“relateGroup”指向一的一端。在多的一端通过group维护一的一端。
 
一对多关联映射:是在"一"的一端为多的一端添加外主键,它维护的关系为一到多的关系,如:当载入一个组(group)时将会同时载入此组用户(user)的信息。它的关系映射将写在一的一端(group):                           
 <set name="users" order-by="name">
 <key column="relatedGroup"/>
 <one-to-many class="com.dvnchina.hibernate.User"/>         
 </set>      
此时通过<key column="relatedGroup"/>在多的一端(user)添加了一个外键“relateGroup”指向一的一端。在一的一端通过users维护多的一端。  
                          
总之,一对多和多对一的映射策略是一致的,都是通过在"多"的一端添加一个外键指向"一"的一端,只是站的角度不同。
 
个人总结:
1、cascade写在某方,表示在操作此方时,与此方关联的另一方是否被操作。此关联是指操作时对象中包含的对象(比如保存部门时,dept.setEm(em),em对象也被保存)。
比如部门表--员工表,双向多多对一,cascade="delete"写在部门表,那么表示在删除部门时与此部门相关的员工也全部被删除!
2、关系的维护(inverse)通常都是交给多方
 
 
 
 
下面一对多的双向关联是图,有关写法和结果:
 

 
 

最新文章

  1. pyqt信号和槽应用举例
  2. html table冻结列
  3. 【mysql】关于乐观锁
  4. Leetcode 98. Validate Binary Search Tree
  5. express-5 质量保证(2)
  6. android 通知
  7. 隐藏apache版本号 PHP版本号
  8. Row Border in DataGrid 表格边框
  9. Sqoop 1.99.4 安装
  10. php 写一个水仙花数的函数
  11. python3 python2 import 的区别
  12. hdu 2018递推
  13. Android Multimedia框架总结(二十二)MediaCodec中C++中创建到start过程及状态变换
  14. RDD:基于内存的集群计算容错抽象
  15. Python的基本数据数字、字符串、布尔值及其魔法
  16. 第九节:基于MVC5+AutoFac+EF+Log4Net的基础结构搭建
  17. centos ssh终端下高亮显示git分支名
  18. Java多线程之线程的状态以及线程间协作通信导致的线程状态转换
  19. ASTER:An Attentional Scene Text Recognizer with Flexible Rectification
  20. Axel and Marston in Bitland CodeForces - 782F (bitset优化)

热门文章

  1. Redis学习笔记五:独立功能之事务
  2. [Leetcode19] Remove Nth Node From End of List
  3. JDBC MySQL
  4. 如何学习caffe
  5. Retina视网膜屏中CSS3边框图片像素虚边的问题
  6. BZOJ 1468: Tree
  7. 用ConfigParser模块读写配置文件——Python
  8. stty命令使用
  9. CentOS 下安装xdebug
  10. 如何区分SNAT和DNAT