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();}}

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

结论:

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

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

hibernate教程

hibernate教程_Hibernate多对多教程相关推荐

  1. hibernate示例_Hibernate条件示例教程

    hibernate示例 Welcome to the Hibernate Criteria Example Tutorial. Today we will look into Criteria in ...

  2. hibernate教程_Hibernate教程

    hibernate教程 Recently I have written a lot of hibernate tutorial. Hibernate is one of the best Java O ...

  3. Spring MVC Hibernate MySQL集成CRUD示例教程

    Spring MVC Hibernate MySQL集成CRUD示例教程 我们在上一篇教程中学习了如何集成Spring和Hibernate.今天,我们将继续前进,并将Spring MVC和Hibern ...

  4. Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程

    Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程 Java Persistence API是标准规范.它提供了一个由不同实现者框架 ...

  5. Hibernate Tomcat JNDI DataSource示例教程

    Hibernate Tomcat JNDI DataSource示例教程 欢迎来到Hibernate Tomcat JNDI DataSource示例教程.我们已经看到如何在独立的Java应用程序中使 ...

  6. Hibernate Tomcat JNDI数据源示例教程

    Welcome to the Hibernate Tomcat JNDI DataSource example tutorial. We have already seen how to use Hi ...

  7. hibernate 标识符_Hibernate中的标识符

    hibernate 标识符 Hibernate中的标识符为实体的主键属性建模. 它有助于我们唯一地标识JPA实体. 每个实体都必须定义一个标识符. 同样,它可以是简单的也可以是复合的. 我们可以通过几 ...

  8. Spring教程 - Spring核心框架教程

    Spring教程 - Spring核心框架教程 Spring是最广泛使用的Java EE框架之一.我已经在Spring Tutorial上写了很多内容,这是一篇摘要文章,它将作为索引按顺序完成所有这些 ...

  9. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

最新文章

  1. 修改tomcat6.0.25日志默认路径
  2. 计算机网络第三章-数据链路层
  3. API网关如何实现对服务下线实时感知
  4. [USACO07NOV]牛继电器Cow Relays
  5. foreach 循环详解
  6. iOS开发-多层嵌套block中如何使用__weak和__strong
  7. SAP FICO面试题目+答案
  8. ***基于协同过滤,NMF和Baseline的推荐算法
  9. forever不重启 node_利用forever确保nodejs在后台运行,不会down掉
  10. paip.DEVSUITE DEVTEST 404错误
  11. vscode - 设置 Python 版本
  12. 实用机器人设计(一)-机器人技术基础
  13. photoshop CS6 注册码文件 amtlib.dll
  14. ubuntu16.04离线安装NIVIDIA驱动
  15. 特殊的自然常数π以及e
  16. matlab FFT 和IFFT
  17. 网站建设的几个细节小技巧@江苏一网推
  18. Python之axis函数
  19. salesforce中常用技能总结(纯粹干货,深度积累)图解
  20. 留学生日常英语46~50

热门文章

  1. [APIO2013]机器人(DP+SPFA最短路)
  2. Loj#3026-「ROIR 2018 Day1」管道监控【Trie,费用流】
  3. P3293-[SCOI2016]美味【主席树】
  4. jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
  5. 上古时期(大雾)的数据结构pdf
  6. P3914-染色计数【树形dp】
  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games
  8. 牛客小白月赛 27部分题解
  9. 架构师必须掌握的 10 条设计原则
  10. ConcurrentHashMap能完全替代HashTable吗?