两个类都需要使用对方特性,但其间只有一个单向连接

重构:添加一个反向指针,并使修改函数能够同时更新两条连接

由哪个类负责控制关联关系。建议单个类来操控,因为这样就可以将所有处理关联关系的逻辑安置于一地。

1、如果两者都是引用对象,而期间的关联是“一对多”关系,那么就由“拥有单一引用”的那一方承担“控制者”角色。
    2、如果某个对象是组成另一个对象的部件,那么由后者(整体)负责控制关联关系。
    3、如果两者都是引用对象,而期间的关联是“多对多”关系,那么随便哪个对象控制关联关系都可。

public class Order {private Customer customer;public Customer getCustomer() {return customer;}// 建议:一对多关系里,【一方】维护关系.public void setCustomer(Customer arg) {if (this.customer != null) {this.customer.friendOrders().remove(this);}this.customer = arg;if (this.customer != null) {this.customer.friendOrders().add(this);}}
}public class Customer {private Set<Order> orders = new HashSet<>();public Set<Order> friendOrders() {/*should only be used by Order when modifying the association*/return orders;}// 【多方】也修改连接,直接调用【一方】的函数.public void addOrder(Order arg) {arg.setCustomer(this);}
}

多对多场景:

public class Order {private Set<Customer> customers;// controlling methods.public void addCustomer(Customer arg) {arg.friendOrders().add(this);this.customers.add(arg);}public void removeCustomer(Customer arg) {arg.friendOrders().remove(this);this.customers.remove(arg);}
}public class Customer {private Set<Order> orders = new HashSet<>();public Set<Order> friendOrders() {/*should only be used by Order when modifying the association*/return orders;}// 使用控制方函数.public void addOrder(Order arg) {arg.addCustomer(this);}public void removOrder(Order arg) {arg.removeCustomer(this);}
}

Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)相关推荐

  1. Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射

    在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...

  2. 多对多关联映射(双向关联)见项目:me_many_to_many

    1.模型 一个用户拥有多个角色,一个角色拥有多个用户. 2.实体类(省略set,get方法) public class User {  private int id;  private String ...

  3. 单向循环链表改成双向循环链表

    #include<stdio.h> #include<stdlib.h> typedef char Elemtype; int length = 8; char s[8] = ...

  4. Hibernate(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...

  5. hibernate one2one 唯一外键关联(双向关联)

    hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...

  6. Hibernate一对多单向关联和双向关联映射方法及其优缺点

    一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...

  7. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  8. [置顶] Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  9. jpa多表关联查询_JPA【关联查询篇】

    摘要:本文主要介绍JPA的多表关联查询(一对一.一对多.双向关联.多对一.多对多)以及N+1查询的优化. 1. JPA多表关联查询 多表关联查询就是实现使用一个实体类对象操作或者查询多个表的数据. 配 ...

最新文章

  1. 开发环境配置--Ubuntu+Qt4+OpenCV(三)
  2. Failed to install VS Code update.
  3. 最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)
  4. css 做幻灯片效果
  5. 使用说明_预拌混凝土使用说明
  6. 开源内容管理系统 php mysql_十大免费PHP+MySql平台内容管理系统推荐
  7. C++ 标准库之cctype
  8. kde重启_重启崩溃的 KDE
  9. 谷歌游览器插件html5,谷歌丢弃浏览器插件,全面开发html5
  10. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  11. saltstackmysql return报错
  12. HDMI转Displayport转换器支持4K分辨率
  13. 微信小程序、uni-app使用iconfont-tools将iconfont彩色字体图标组件化并使用
  14. H5移动端项目实现手写签名功能 vue实现手写签名
  15. vm 负责虚拟机出现“”适配器 的mac地址在保留地址范围内‘’
  16. 【车牌识别和动态称重系统】(三)基于PyQt的UI设计
  17. 通达信玄黄趋势波段指标源码
  18. electron学习
  19. 常见web应用防护软件下载2021
  20. ANSYS动力分析—谐响应分析(转载)…

热门文章

  1. 开源开放 | DeepKE发布新版本:支持低资源、长篇章、多任务的图谱抽取开源框架(浙江大学)...
  2. 编译过程中的链接地址对最终编译镜像文件的影响
  3. Spark笔记——技术点汇总
  4. Unity 找到隐藏的UGUI
  5. spring基础整理
  6. javascript数组扁平化处理
  7. 细数黑客攻击的七大战术
  8. 5款新颖的ReSharper插件
  9. 普通电阻触摸屏多点触摸低成本解决方 转载
  10. linux的驱动开发——简单驱动程序编写