休眠多对多教程

介绍:

在本教程中,我们将学习使用Hibernate @ManyToMany注释定义和使用多对多实体关联。

上下文构建:

为了继续学习本教程,我们假设我们有两个实体- 雇员资格:

多对多

众所周知,一名雇员可以拥有多个资格。 此外,可以有N名具有特定资格的员工。 显然,这意味着“ 雇员”和“ 资格”实体共享多对多关系

Maven依赖项:

在我们的POM中,首先确保我们具有必需的依赖项:

<dependencies>...<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.0.Final</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency>...
</dependencies>

我们始终可以在Maven Central中找到最新的可用版本。 另外,本教程使用MySQL数据库。

数据库设置:

为了表示ManyToMany关联,我们至少需要三个数据库表。 因此,假设我们有下面的ERD图表示我们的数据库:

多对多

另外,让我们创建表:

CREATE TABLE employee (emp_id INT(15) NOT NULL AUTO_INCREMENT,first_name VARCHAR(20) DEFAULT NULL,last_name  VARCHAR(20) DEFAULT NULL,PRIMARY KEY (emp_id)
);CREATE TABLE qualification (qualification_id INT(15) NOT NULL AUTO_INCREMENT,title VARCHAR(20) DEFAULT NULL,PRIMARY KEY (qualification_id)
);CREATE TABLE employee_qualification (emp_id INT(15) NOT NULL,qualification_id INT(15) NOT NULL,PRIMARY KEY (emp_id, qualification_id),CONSTRAINT employee_qualification_empIdFk FOREIGN KEY (emp_id) REFERENCES employee(emp_id),CONSTRAINT employee_qualification_qualIdFk FOREIGN KEY (qualification_id) REFERENCES qualification (qualification_id)
);

创建实体:

现在我们已经准备好数据库设置,让我们首先创建模型类– Employee

@Entity
@Table(name = "Employee")
public class Employee { // ...@ManyToMany(cascade = { CascadeType.ALL })@JoinTable(name = "Employee_Qualification", joinColumns = { @JoinColumn(name = "emp_id") }, inverseJoinColumns = { @JoinColumn(name = "qualification_id") })Set<Qualification> qualifications = new HashSet<>();...
}

多对多关联具有两个方面-拥有方和反向/引用方在关系的所有者端指定了到数据库的实际物理映射 。 在这里, Employee是拥有的实体,因此我们使用@JoinTable批注定义了实际的物理数据库映射。 @JoinTable批注定义了employee_qualification连接表

@JoinColumn批注指定将用于联接表的列。 我们还提到了qualification_id是反向联接列。 它仅表示它是指关系的相反方面,即我们的资格等级。

现在让我们定义我们的资格实体类:

@Entity
@Table(name = "Qualification")
public class Qualification {    // ...  @ManyToMany(mappedBy = "qualifications")private Set<Employee> employees = new HashSet<>();...
}

由于Qualification类是关联的引用侧或相反侧,因此我们已使用mappingBy属性引用其所属侧( Employee )。

同样我们可以看到,我们在两个实体中都使用了@ManyToMany注释。

使用多对多关联:

在我们的main()方法中,我们可以测试上述映射:

//In our MainApp class
public static void main(String[] args) {Session session = null;    try {SessionFactory factory = new Configuration().configure().buildSessionFactory();session = factory.openSession();Transaction tranx = session.beginTransaction();Employee james = new Employee(1001, "James", "Allen");Employee selena = new Employee(1002, "Selena", "Gomez");Set<Employee> employees = new HashSet<>();employees.add(james);employees.add(selena);Qualification masters = new Qualification(8787, "Masters Degree");masters.setEmployees(employees);     session.save(masters);tranx.commit();} catch(Exception e) {e.printStackTrace();}finally {if(session != null)session.close();}}

在执行上述代码后,我们的测试数据将被插入到employeequalificationemployee_qualification表中。

结论:

在此迷你教程中,我们研究了如何建立ManyToMany JPA关联。 我们已经在普通的XML配置上使用了JPA批注,因为它们使用起来更加方便并且越来越流行。

翻译自: https://www.javacodegeeks.com/2019/04/hibernate-many-many-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度区分LoRa和LoRaWAN的区别

1.总体介绍 随着物联网技术的飞速发展&#xff0c;NB-IoT、LoRa、SigFox等通信技术名词我们也偶尔有所闻&#xff0c;对于普通人或者是刚刚接触物联网领域的人来说&#xff0c;在一大堆名词前面可能也是分布清楚&#xff0c;本文也将针对LoRa和LoRaWN做详细的介绍和比较。 总体…

工业交换机为何要老化测试

老化测试检测标准可以根据客户指定&#xff0c;无特殊要求即根据国家相应标准进行老化测试检验。老化测试主要是模拟产品在现实使用过程中的各种恶劣条件的高强度测试&#xff0c;同时根据使用的要求&#xff0c;合理地预测产品使用寿命。接下来飞畅科技的小编来为大家详细介绍…

物联网技术lora的简介和应用

物联网的通信传输技术&#xff0c;有很多种常用的方案&#xff0c;除了LORA以外&#xff0c;还有NB-IoT、WIFI、蓝牙、Zigbee、Dustl和sub-1GHz等,不同的通讯技术也有着不同的特点&#xff0c;和各自适合的应用场景。但是对于长距离。低功耗和小数据量的传输的应用场景&#xf…

工业交换机为什么需要进行高低温检测?

工业交换机采用宽温设计&#xff0c;-40℃&#xff5e;75℃的工作温度&#xff0c;是可以在极端条件下使用的工业级设备&#xff0c;每台工业交换机出厂都需要经过层层检测&#xff0c;接下来飞畅科技的小编就来为大家详细介绍下工业交换机为什么需要进行高低温的检测&#xff…

工业现场为何必须使用工业环网交换机?

我们都知道&#xff0c;交换机有商业级和工业级的区分&#xff0c;商业级交换机一般使用在家庭、小型企业等场所&#xff0c;工业级交换机常常使用在工业环境中。那么&#xff0c;为什么工业环境中不能使用商业级交换机呢&#xff1f;工业现场为何必须使用工业环网交换机&#…

工业物联网简析

工业物联网是指在工业中应用物联网技术&#xff0c;让工业行业实现增值的技术模式。 所有的物联网都是为了实现万物互联&#xff0c;特别是物与物之间的互联&#xff0c;但是工业物联网又有其专有的属性&#xff0c;原因是与工业物联网相对的消费物联网本身的联网密度、联网的实…

formlayout_精简SWT FormLayout的用法

formlayout一直在追求效率&#xff0c;最近我重新考虑了SWT FormLayout的可用性。 尽管就灵活性而言&#xff0c;它是我最喜欢的核心布局之一&#xff0c;但我不得不认识到&#xff0c;大多数同仁都不愿意使用它。 考虑到面部React&#xff0c;建议将其建议用于适当的任务有时实…

物联网时代会给我们带来怎么样的改变?

物联网的出现给全球各行各业都带来了极大的改变&#xff0c;物联网作为未来科技发展的重要方向&#xff0c;一直受到全球各国的重视&#xff0c;我国物联网经济也一直在高速的发展&#xff0c;由中国经济信息社发布的2018-2019中国物联网发展年度报告》中显示&#xff0c;2018年…

工业以太网交换机的软件故障

工业以太网交换机的软件故障是指系统及其配置上的故障&#xff0c;当发现工业以太网交换机在通信中出现问题&#xff0c;怀疑是工业交换机出现问题后&#xff0c;那么我们该怎么进行排除呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来看看吧&#xff01; (1)系统错误&…

电源模块DC-DC隔离型测试方法

本篇介绍如何测试电源模块的重点技术指标和测试方法。电源模块选定后&#xff0c;接下来就是非常重要的环节&#xff0c;测试产品性能和参数。一个产品的品质好坏取决于各项技术参数指标的平衡。 一、电源模块的测试与方法 测试阶段一般分2个部分&#xff1a; 1、模拟实际电路工…

linux alsa 音频管理,在Linux上的高级音频控制

Linux音频控制与Linux音频系统结构一样混乱。 长篇小说&#xff0c;经过多年的发展&#xff0c;默认的声音控制工具看起来像这样&#xff1a;设置音量级别的默认和唯一选项可能对于大多数用户来说是足够的&#xff0c;但是当您想要设置特定音频级别或为不同音频源定义各自的设置…

物联网未来发展的十大趋势

根据IoTAnalytics的预测&#xff0c;到2020年&#xff0c;全球活跃的物联网设备数量预计将达到100亿台&#xff0c;到2025年或将达到220亿台&#xff1b;另外根据EnterpriseCIO的预测&#xff0c;到2020年&#xff0c;物联网的市场规模将增长到4570亿美元&#xff0c;年复合增长…

java 基础包的功能_Java 8的功能基础

java 基础包的功能Java 8彻底改变了Java。 它很可能是过去10年中最重要的Java版本。 有很多新功能&#xff0c;包括默认方法&#xff0c;方法和构造函数引用以及lambda&#xff0c; 仅举几例 。 更有趣的功能之一是新的java.util.stream API&#xff0c;正如Javadoc所述&#…

PDH光端机的原理_PDH光端机的作用优点

随着通信技术的不断发展&#xff0c;自从有了PDH光端机这个新的设备&#xff0c;在信息的传输方面真的便利了我们很多&#xff0c;不过&#xff0c;对于这个新的装备PDH光端机&#xff0c;估计大多数小伙伴都不太了解吧&#xff0c;那么为了让大家跟上时代的步伐&#xff0c;接…

新一代蓝牙对工业物联网(IIOT)的应用

蓝牙是一种收到市场广大认可的一种无线通信技术&#xff0c;并且得益于Mesh组网、低功耗和传输速度快等方面的优势&#xff0c;蓝牙在工业物联网中也起着极为重要的地位。 此外市场上的无线连接技术有着很多的种类&#xff0c;每项技术都这其优缺点和使用环境&#xff0c;包括w…

LoRa通信技术和其优势

LoRa 是LPWAN通信技术中的一种&#xff0c;是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案。这一方案的出现改变了以往关于传输距离和功耗需要折中的考虑方式&#xff0c;为用户提供了一种简单的能实现远距离通信、电池寿命长、大容量的系统&#xff0c…

E95-DTU(4G01-485)数传电台的特点及其应用详解

1、E95-DTU(4G01-485简介 E95-DTU(4G01-485)是采用 4G CAT1 方案的云数传电台&#xff0c;电台支持微信小程序简单配对使用。可以显现一对一、一对多、多对多等复杂应用场景。由于采用了云技术&#xff0c;数传电台相互透传的距离不受限制。 云数传电台作为一种突破性的数传产…

SDH光端机概述与技术应用详解

SDH技术自从90年代引入以来&#xff0c;至今已经是一种成熟、标准的技术&#xff0c;在骨干网中被广泛采用&#xff0c;且价格越来越低。SDH光端机可广泛应用于电信数据业务、电力、银行、公安、部队等部门公用电话网接入或专线信息传输。接下来飞畅科技的小编将来为大家详细讲…

物联网技术在智慧校园中的应用

虽然很多人可能会不注意&#xff0c;但是物联网技术已经很普遍的应用在了我们的生活当中&#xff0c;小到日常穿戴、出行&#xff0c;大到农业、工业领域。 物联网应用的范围现在已经遍布在我们生活的各个角落&#xff0c;让物体和物体之间能够时间沟通互联。随着物联网的不断发…

junit测试设置不回滚_正确设置JUnit测试名称

junit测试设置不回滚寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类&#xff0c;方法&#xff0c;变量&#xff0c;仅举几例。 但是&#xff0c;什么使名字成为好名字呢&#xff1f; 引用Oncle Bob的话&#xff1a;“三件事&#xff1a;可读性&#xff0c;可读性…