对象之间的关系

在 JPA 中,对数据库的操作是通过操作实体对象实现的。本章节将介绍对象与对象之间的关系,对象之间关系有如下几种:

(1)依赖关系 Dependency

(2)关联关系 Association

(3)聚合关系 Aggregation

(4)组合关系 Composition

(5)泛化关系 Generalize

依赖关系 Dependency

依赖关系是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

如果 A 对象离开了 B 对象,A 对象就不能正常编译,则 A 对象依赖 B 对象。如果在 A 类使用到了 B 类(调用了 B 类的方法,调用了 B 类的字段),则 A 对象依赖 B 对象。例如:

public class A {
    public void show(B b) {
        //...
    }
}

public class B {}

关联关系 Association

关联关系是对象之间一种引用关系,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

判断方法:

  • 判断都是从对象的实例上面来看的

  • 判断关系必须确定一对属性

  • 判断关系必须确定具体需求

聚合关系 Aggregation

聚合关系表示 has-a 的关系,是一种不稳定的包含关系,聚合类不必对被聚合类负责。使用集合属性表达聚合关系较强于一般关联,有整体与局部之间的关系,并且没有了整体,局部也可单独存在,如小组与小组里面的成员,小组不存在,成员也可单独存在,也可加入其它小组,其组成关系可以共。

组合关系 Composition

组合关系是强聚合关系,但是整体和部分不能独立存在,一定是在一个模块中同时管理整体和部分,生命周期必须相同。例如:单据和单据明细/购物车信息

泛化关系 Generalize

泛化关系其实就是继承关系。在实际开发中,我们需要去维护对象之间的关系。意思是说,在保存 A 的时候,需要考虑到关联的 B,在查询到 A 之后,如何将关联的 B 对象查询到。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号