hibernate教程_Hibernate多对多教程
hibernate教程
介绍:
在本教程中,我们将学习使用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();}}
执行上述代码后,我们的测试数据将被插入到employee , qualification和employee_qualification表中。
结论:
在此迷你教程中,我们研究了如何建立ManyToMany JPA关联。 我们已经在普通的XML配置上使用了JPA批注,因为它们使用起来更方便并且越来越流行。
翻译自: https://www.javacodegeeks.com/2019/04/hibernate-many-many-tutorial.html
hibernate教程
hibernate教程_Hibernate多对多教程相关推荐
- hibernate示例_Hibernate条件示例教程
hibernate示例 Welcome to the Hibernate Criteria Example Tutorial. Today we will look into Criteria in ...
- hibernate教程_Hibernate教程
hibernate教程 Recently I have written a lot of hibernate tutorial. Hibernate is one of the best Java O ...
- Spring MVC Hibernate MySQL集成CRUD示例教程
Spring MVC Hibernate MySQL集成CRUD示例教程 我们在上一篇教程中学习了如何集成Spring和Hibernate.今天,我们将继续前进,并将Spring MVC和Hibern ...
- Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程
Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程 Java Persistence API是标准规范.它提供了一个由不同实现者框架 ...
- Hibernate Tomcat JNDI DataSource示例教程
Hibernate Tomcat JNDI DataSource示例教程 欢迎来到Hibernate Tomcat JNDI DataSource示例教程.我们已经看到如何在独立的Java应用程序中使 ...
- Hibernate Tomcat JNDI数据源示例教程
Welcome to the Hibernate Tomcat JNDI DataSource example tutorial. We have already seen how to use Hi ...
- hibernate 标识符_Hibernate中的标识符
hibernate 标识符 Hibernate中的标识符为实体的主键属性建模. 它有助于我们唯一地标识JPA实体. 每个实体都必须定义一个标识符. 同样,它可以是简单的也可以是复合的. 我们可以通过几 ...
- Spring教程 - Spring核心框架教程
Spring教程 - Spring核心框架教程 Spring是最广泛使用的Java EE框架之一.我已经在Spring Tutorial上写了很多内容,这是一篇摘要文章,它将作为索引按顺序完成所有这些 ...
- HealthKit开发快速入门教程大学霸内部教程
HealthKit开发快速入门教程大学霸内部教程 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...
最新文章
- 修改tomcat6.0.25日志默认路径
- 计算机网络第三章-数据链路层
- API网关如何实现对服务下线实时感知
- [USACO07NOV]牛继电器Cow Relays
- foreach 循环详解
- iOS开发-多层嵌套block中如何使用__weak和__strong
- SAP FICO面试题目+答案
- ***基于协同过滤,NMF和Baseline的推荐算法
- forever不重启 node_利用forever确保nodejs在后台运行,不会down掉
- paip.DEVSUITE DEVTEST 404错误
- vscode - 设置 Python 版本
- 实用机器人设计(一)-机器人技术基础
- photoshop CS6 注册码文件 amtlib.dll
- ubuntu16.04离线安装NIVIDIA驱动
- 特殊的自然常数π以及e
- matlab FFT 和IFFT
- 网站建设的几个细节小技巧@江苏一网推
- Python之axis函数
- salesforce中常用技能总结(纯粹干货,深度积累)图解
- 留学生日常英语46~50
热门文章
- [APIO2013]机器人(DP+SPFA最短路)
- Loj#3026-「ROIR 2018 Day1」管道监控【Trie,费用流】
- P3293-[SCOI2016]美味【主席树】
- jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
- 上古时期(大雾)的数据结构pdf
- P3914-染色计数【树形dp】
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games
- 牛客小白月赛 27部分题解
- 架构师必须掌握的 10 条设计原则
- ConcurrentHashMap能完全替代HashTable吗?