JPA - 实体关系
-
简述
本章将带您了解实体之间的关系。通常,数据库中表之间的关系更有效。这里将实体类视为关系表(JPA的概念),因此实体类之间的关系如下:- @ManyToOne 关系
- @OneToMany 关系
- @OneToOne 关系
- @ManyToMany 关系
-
@ManyToOne 关系
实体之间的多对一关系:其中一个实体(列或列集)被另一个包含唯一值的实体(列或列集)引用。在关系数据库中,这些关系可以通过在表之间使用外键/主键来应用。让我们考虑 Employee 和 Department 实体之间的关系示例。在单向方式中,即从员工到部门,多对一关系适用。这意味着员工的每条记录都包含一个部门 ID,它应该是部门表中的主键。在 Employee 表中,Department id 是外键。该图解释了多对一关系如下:在 Eclipse IDE 中创建一个名为的 JPA 项目 JPA_Eclipselink_MTO. 本项目所有模块如下图所示:创建实体
按照上面给出的图表创建实体。创建一个名为的包‘com.tutorialspoin.eclipselink.entity’ 在下面 ‘src’包裹。创建一个名为的类Department.java在给定的包下。类Department实体如下图:在此关系中创建第二个实体 - 名为 Employee 实体类 Employee.java 在下面 ‘com.jc2182.eclipselink.entity’包裹。Employee 实体类如下所示:持久化文件
需要 Persistence.xml 文件来配置数据库和实体类的注册。Persiteence.xml 将在创建 JPA 项目时由 Eclipse IDE 创建。配置详细信息是用户规范。persistence.xml 文件如下所示:服务类
该模块包含服务类,它使用属性初始化实现关系部分。在下面创建一个包‘src’ 包命名 ‘com.jc2182.eclipselink.service’. 名为的 DAO 类ManyToOne.java在给定的包下创建。DAO类如下所示:编译并执行上述程序后,您将在 Eclipse IDE 的控制台面板中收到通知。对于输出,请检查 MySQL 工作台。在此示例中,创建了两个表。在 MySQL 接口中传递以下查询和结果 Department 查询中以表格形式显示的表格如下:在 MySQL 接口中传递以下查询和结果 Employee 查询中以表格形式显示的表格如下:在上表中,Deparment_Id 是 Department 表中的外键(引用字段)。 -
@OneToMany 关系
在这种关系中,一个实体的每一行都引用了另一个实体中的许多子记录。重要的是子记录不能有多个父记录。在表 A 和表 B 之间的一对多关系中,表 A 中的每一行都链接到表 B 中的 0、1 或许多行。让我们考虑上面的例子。如果Employee 和 Department是反向单向方式,关系是多对一关系。在 Eclipse IDE 中创建一个名为的 JPA 项目JPA_Eclipselink_OTM. 本项目所有模块如下图所示:创建实体
按照上面给出的图表创建实体。创建一个名为的包‘com.tutorialspoin.eclipselink.entity’ 在下面 ‘src’包裹。创建一个名为的类Department.java在给定的包下。类Department实体如下图:在此关系中创建第二个实体 -Employee 实体类,命名为 Employee.java 在下面 ‘com.jc2182.eclipselink.entity’包裹。Employee 实体类如下所示:持久化文件
Persistence.xml 将在创建 JPA 项目时由 Eclipse IDE 创建。配置详细信息是用户规范。persistence.xml 文件如下所示:服务类
该模块包含服务类,它使用属性初始化实现关系部分。在下面创建一个包‘src’ 包命名 ‘com.jc2182.eclipselink.service’. 名为的 DAO 类OneToMany.java在给定的包下创建。DAO类如下所示:编译并执行上述程序后,您将在 Eclipse IDE 的控制台面板中收到通知。对于输出检查 MySQL 工作台如下。在这个项目中创建了三个表。在 MySQL 接口中传递以下查询和结果 department_employee 查询中以表格形式显示的表格如下:在上表中,deparment_id 和employee_id 字段是来自department 和employee 表的外键(引用字段)。在MySQL界面中通过如下查询,查询中的部门表结果以表格形式显示如下:在MySQL界面中通过如下查询,查询表中employee表的结果如下图所示: -
@OneToOne 关系
在一对一关系中,一项只能属于另一项。这意味着一个实体的每一行都被引用到另一个实体的一个且只有一行。让我们考虑上面的例子。 Employee 和 Department以反向单向方式,该关系是一对一关系。这意味着每个员工只属于一个部门。在 Eclipse IDE 中创建一个名为的 JPA 项目JPA_Eclipselink_OTO. 本项目所有模块如下图所示:创建实体
按照上面给出的图表创建实体。创建一个名为的包‘com.tutorialspoin.eclipselink.entity’ 在下面 ‘src’包裹。创建一个名为的类Department.java在给定的包下。类Department实体如下图:在此关系中创建第二个实体 -Employee 实体类,命名为 Employee.java 在下面 ‘com.jc2182.eclipselink.entity’包裹。Employee 实体类如下所示:持久化文件
Persistence.xml 将在创建 JPA 项目时由 Eclipse IDE 创建。配置详细信息是用户规范。persistence.xml 文件如下所示:服务类
该模块包含服务类,它使用属性初始化实现关系部分。在下面创建一个包‘src’ 包命名 ‘com.jc2182.eclipselink.service’. 名为的 DAO 类OneToOne.java在给定的包下创建。DAO类如下所示:编译并执行上述程序后,您将在 Eclipse IDE 的控制台面板中收到通知。对于输出,请按如下方式检查 MySQL 工作台。在上面的示例中,创建了两个表。在 MySQL 接口中传递以下查询和结果 department 查询中以表格形式显示的表格如下:在 MySQL 接口中传递以下查询和结果 employee 查询中以表格形式显示的表格如下: -
@ManyToMany 关系
多对多关系是指一个实体中的一行或多行与其他实体中的多行相关联。让我们考虑一个 Class 和 Teacher 实体之间关系的例子。在双向方式中,Class 和Teacher 都具有多对一的关系。这意味着 Class 的每条记录都由教师集(教师 ID)引用,教师集应该是 Teacher 表中的主键并存储在 Teacher_Class 表中,反之亦然。在这里,Teachers_Class 表包含两个外键字段。在 Eclipse IDE 中创建一个名为的 JPA 项目JPA_Eclipselink_MTM. 本项目所有模块如下图所示:创建实体
按照上面给出的图表创建实体。创建一个名为的包‘com.tutorialspoin.eclipselink.entity’ 在下面 ‘src’包裹。创建一个名为的类Clas.java在给定的包下。类Department实体如下图:在此关系中创建第二个实体 -Employee 实体类,命名为 Teacher.java 在下面 ‘com.jc2182.eclipselink.entity’包裹。Employee 实体类如下所示:持久化文件
Persistence.xml 将由 Eclipse IDE 在创建 JPA 项目时创建。配置详细信息是用户规范。persistence.xml 文件如下所示:服务类
该模块包含服务类,它使用属性初始化实现关系部分。在下面创建一个包‘src’ 包命名 ‘com.jc2182.eclipselink.service’. 名为的 DAO 类ManyToMany.java在给定的包下创建。DAO类如下所示:编译并执行上述程序后,您将在 Eclipse IDE 的控制台面板中收到通知。对于输出,请按如下方式检查 MySQL 工作台。在此示例项目中,创建了三个表。在 MySQL 接口中传递以下查询和结果 teacher_clas 查询中以表格形式显示的表格如下所示。上表中teacher_tid是teacher表的外键,classet_cid是class表的外键。因此,不同的老师被分配到不同的班级。在MySQL界面中通过如下查询,查询中以表格形式显示teacher表的结果如下:在 MySQL 接口中传递以下查询和结果 clas 查询中以表格形式显示的表格如下: