JPA关系模型——一对多关系

news/2024/10/30 8:51:55/

通过前面几篇文章的学习,我们了解到了JPA的几种关系模型,并举例说明了一对一的关系模型。下面就举个简单例子说明一下一对多的关系模型,也是我们在实际开发中用的最多的一种。

假设我们有两个实体类,Department和Employee,它们之间是一对多的关系,一个部门可以有多个员工。

@Entity@Table(name = "departments")public class Department {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;@OneToMany(mappedBy = "department")private List<Employee> employees;// 构造函数、getter和setter方法等省略}@Entity@Table(name = "employees")public class Employee {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name@ManyToOne@JoinColumn(name = "department_id")private Department department;// 构造函数、getter和setter方法等省略}

在Department实体类中,使用@OneToMany(mappedBy = "department")注解表示与Employee实体类的关系,mappedBy属性指定了关系维护的端,即Employee类中的department属性。

在Employee实体类中,使用@ManyToOne注解表示与Department实体类的关系,@JoinColumn注解指定了外键列的名称,这里使用了department_id。

接下来,我们可以使用JPA进行数据库操作,例如保存和查询一对多关系的数据:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("YourPersistenceUnit");EntityManager entityManager = entityManagerFactory.createEntityManager();// 创建Department对象Department department = new Department();department.setName("IT Department");// 创建Employee对象Employee employee1 = new Employee();employee1.setName("John Doe");employee1.setDepartment(department);Employee employee2 = new Employee();employee2.setName("Jane Smith");employee2.setDepartment(department);// 建立关系department.setEmployees(Arrays.asList(employee1, employee2));// 保存数据entityManager.getTransaction().begin();entityManager.persist(department);entityManager.persist(employee1);entityManager.persist(employee2);entityManager.getTransaction().commit();// 查询数据Department savedDepartment = entityManager.find(Department.class, department.getId());List<Employee> employees = savedDepartment.getEmployees();for (Employee employee : employees) {System.out.println(employee.getName());}entityManager.close();entityManagerFactory.close();

上述代码中,我们首先创建了一个Department对象和两个Employee对象,并建立了它们之间的关系。然后,通过调用EntityManager的persist()方法将它们保存到数据库中。

最后,我们使用find()方法查询保存的数据,并遍历打印部门中的员工名字。

上面只是一个很简单的实例。我们在实际的工作中基本也不会遇到这种,。但是不管多么复杂都是按照这个套路来就行。


http://www.ppmy.cn/news/332219.html

相关文章

[LsSDK][tool] ls_syscfg_gui2.1 and ls_syscfg_debug1.0

文章目录 一、简介1.工具的目的2. 更新点下个更新 三、配置文件 一、简介 1.工具的目的 ① 可视化选择IO口功能。 ② 自由配置IO支持的功能。 ③ 适用各类MCU&#xff0c;方便移植和开发。 ④ 功能配置和裁剪&#xff08;选项-syscfg-待完成–需要适配keil语法有些麻烦&#…

第五十二回:Drawer Widget

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了TabBarView Widget相关的内容,本章回中将介绍 Drawer Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们这里介绍的Drawer Widget是指从屏幕左侧推出的菜单&#xff0c;国内有些地方把它翻译成…

Qt动态调用(外部调用)SDK库(dll动态库)

Qt动态调用SDK库&#xff08;dll动态库&#xff09; ​​​​​​​ 之前的文章&#xff0c;介绍了Qt调用sdk库的方式&#xff0c;大家可以点击查看&#xff08;Q调用SDK库(dll动态库)&#xff09;之前的文章&#xff0c;里面介绍的调用方式就是静态的调用方式。如下图所示&am…

Android约束布局

一、嵌套布局效率可能很低。 在 Android 开发中,我们常常需要使用嵌套布局来实现某些较复杂的界面效果。但是嵌套层级太深会带来一些问题,主要包括: 视图层级过深,导致内存占用过高和性能下降。Android 需要为每个 View 对象分配内存,嵌套层级过深会创建很多 View 对象,占用较…

京瓷1800打印机扫描步骤_京瓷复印机扫描设置方法京瓷复印机扫描到电脑设置...

京瓷KM-2050/2550/3035/4035/5035扫描卡设置说明 扫描至PC设置步骤 (老款京瓷复印机扫描,新款下方有更新) 1.(1)首先在所在设备上安装京瓷扫描组件。 (2)在初始设定/扫描初始设定/基本系统设定/中设定好IP地址。注意DHCP要选择关。 2.设定发件人及收件人 ]3.ip端口扫描 [有针…

麒麟V10系统U盘引导盘制作手册

麒麟V10-SP1服务器系统U盘引导盘制作手册 一、前期准备 1、安装Fedora刻录软件 下载地址&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8888 2、一个容量大于8G的U盘&#xff08;推荐16G以上&#xff0c;空盘&#xff09; 3、麒麟服务器操作系统镜像&#xff08;这…

京瓷4501i打印机扫描步骤_京瓷复印机扫描设置方法–京瓷复印机扫描到电脑设置...

京瓷KM-2050/2550/3035/4035/5035扫描卡设置说明 扫描至PC设置步骤 (老款京瓷复印机扫描,新款下方有更新) 京瓷复印机扫描到电脑设置 1.(1)首先在所在设备上安装京瓷扫描组件。 (2)在初始设定/扫描初始设定/基本系统设定/中设定好IP地址。注意DHCP要选择关。 2.设定发件人及…

银河麒麟V10系统安装U盘制作

1、首先打开UltraISO软件&#xff0c;一般选择较新版本的UltraISO软件。 2、 点击工具栏中打开镜像文件工具&#xff0c;如上图红色方框标志按钮&#xff0c;然后在 “打开ISO文件”对话框中找到下载好的Kylin桌面试用版本Kylin-Desktop-V10-Release-Build1-2101-arm64.iso镜像…