在 JPA 中,对数据库的操作是通过操作实体对象实现的。本章节将介绍对象与对象之间的关系,对象之间关系有如下几种:
(1)依赖关系 Dependency
(2)关联关系 Association
(3)聚合关系 Aggregation
(4)组合关系 Composition
(5)泛化关系 Generalize
依赖关系是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。
如果 A 对象离开了 B 对象,A 对象就不能正常编译,则 A 对象依赖 B 对象。如果在 A 类使用到了 B 类(调用了 B 类的方法,调用了 B 类的字段),则 A 对象依赖 B 对象。例如:
public class A { public void show(B b) { //... } } public class B {}
关联关系是对象之间一种引用关系,A 对象依赖 B 对象,并且把 B 对象作为 A 对象的一个字段,则 A 和 B 是关联关系。比如客户类与订单类之间的关系,这种关系通常使用类的属性体现,指一个类指到另一个类中的属性,而且是长期的(不带有包含关系的关联)一对一、一对多、多对多。例如:
public class Customer { private List<Order> orderList; } public class Order {}
一对一:一个 A 对象属于一个 B 对象,一个 B 对象属于一个 A 对象。例如:QQ 号码对应一个 QQ 空间
一对多:一个 A 对象包含多个 B 对象,比如:一个部门包含多个员工对象,此时我们使用集合来封装 B 对象
多对一:多个 A 对象同属于一个 B 对象,并且每个 A 对象只能属于一个 B 对象。例如:多个员工对象属于同一个部门;设计表的时候,外键在 many 这一方;在开发设计中,添加一个 many 方对象的时候,往往通过下拉列表去选择 one 方
多对多:一个 A 对象属于多个 B 对象,一个 B 对象属于多个 A 对象,对多对可通过中间表来表示关系。比如:一个老师可以有多个学生,一个学生可以有多个老师;
如果通过 A 对象中的某一个属性可以访问该属性对应的 B 对象,则说 A 可以导航到 B。
单向:只能从 A 通过属性导航到 B,B 不能导航到 A
双向:A 可以通过属性导航到 B,B 也可以通过属性导航到 A
判断方法:
判断都是从对象的实例上面来看的
判断关系必须确定一对属性
判断关系必须确定具体需求
聚合关系表示 has-a 的关系,是一种不稳定的包含关系,聚合类不必对被聚合类负责。使用集合属性表达聚合关系较强于一般关联,有整体与局部之间的关系,并且没有了整体,局部也可单独存在,如小组与小组里面的成员,小组不存在,成员也可单独存在,也可加入其它小组,其组成关系可以共。
组合关系是强聚合关系,但是整体和部分不能独立存在,一定是在一个模块中同时管理整体和部分,生命周期必须相同。例如:单据和单据明细/购物车信息
泛化关系其实就是继承关系。在实际开发中,我们需要去维护对象之间的关系。意思是说,在保存 A 的时候,需要考虑到关联的 B,在查询到 A 之后,如何将关联的 B 对象查询到。