休眠多对多教程

介绍:

在本教程中,我们将学习使用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…

cp ft wat_Java数组,Wat!

cp ft wat数组可以做一些令人惊讶的事情。 是否是数组&#xff1f; Serializable array new Serializable[9];数组是数组还是标量&#xff1f; 好吧&#xff0c;它是指向数组的标量。 就像 Object o new Object[9];您可以将数组分配给对象&#xff0c;因为它也是对象。 但是…

经典蓝牙和低功耗蓝牙(BLE)有什么区别?

蓝牙模块Bluetooth module&#xff09;是指集成蓝牙功能的芯片基本电路集合&#xff0c;用于短距离2.4G的无线通讯模块。对于最终用户来说&#xff0c;蓝牙模块是半成品&#xff0c;通过在模块的基础上功能再开发、封装外壳等工序&#xff0c;实现能够利用蓝牙通讯的最终产品。…

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

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

智能家居常用的十大应用场景

一、智能门锁&#xff1a;门锁为家庭安防第1条线&#xff0c;我们在享受智能化生活的同时&#xff0c;也同样要使家庭安全层次更上一层楼&#xff0c;所以我们的门锁具备联网功能&#xff0c;只要门锁被打开&#xff0c;信息就会同步到所有的手机客户端&#xff0c;什么是安全&…

Java 12常规可用性

马克雷因霍尔德&#xff08;Mark Reinhold&#xff09; 今天宣布 &#xff1a;“ Java 12的参考实现JDK 12现在可以普遍使用。” Reinhold在该公告中指出&#xff0c;“可以从https://jdk.java.net/12获得来自Oracle的GPL许可的OpenJDK构建&#xff0c;并且“无疑将很快提供来自…

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

我们都知道&#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、模拟实际电路工…

【渝粤教育】国家开放大学2019年春季 3896人文英语1 参考试题

试卷代号&#xff1a;3896 人文英语1 试题 2019年7月 注 意 事 项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏 内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带 出考场。监考人收完考卷和答题纸后才可离开考…

一分钟了解:zigbee的三种关键角色(视频讲解)

#物联网# 无线通信技术ZIGBEE网络三种关键角色。协调器&#xff0c;路由器&#xff0c;传感器总结起来&#xff0c;ZigBee网络的3个关键角色&#xff0c;即&#xff1a;协调器&#xff0c;路由节点和终端节点 协调器——具有建立新网络的能力&#xff0c;负责启动网络和维护网络…

【渝粤教育】国家开放大学2019年春季 691物理化学及实验 参考试题

科目编号&#xff1a;0691 座位号&#xff1a; 2018-2019学年度第二学期期末考试 物理化学及实验试题 2019年7月 一、填空题&#xff08;每空4分&#xff0c;共40分&#xff09; 1.我们把 和 的流体称为理想流体。 2. 当雷诺数Re <1000时&#xff0c;液体做 &#xff0c;…

JUnit 5中的测试执行顺序

一般实践认为&#xff0c;自动化测试应能够独立运行且无特定顺序&#xff0c;并且测试结果不应依赖于先前测试的结果。 但是在某些情况下&#xff0c;可以证明特定的测试执行顺序是正确的&#xff0c;尤其是在集成或端到端测试中。 默认情况下&#xff0c;在JUnit 5中&#xf…

HDMI光端机常见故障和解决方法大全

HDMI光端机&#xff0c;HDMI光纤延长器&#xff0c;由发射机和接收机组成&#xff0c;是光纤传输HDMI高清音视频的完美解决方案&#xff0c;能通过单芯单模或多模光纤把HDMI高清音视频、红外遥控功能传输到远端。在广泛领域应用中&#xff0c;往往需要把HDMI信号源输送远处进行…

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

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