日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

休眠多对多教程

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 休眠多对多教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹:

在本教程中,我們將學(xué)習(xí)使用Hibernate @ManyToMany注釋定義和使用多對多實體關(guān)聯(lián)。

上下文構(gòu)建:

為了繼續(xù)學(xué)習(xí)本教程,我們假設(shè)我們有兩個實體- 雇員和資格:

眾所周知,一名雇員可以擁有多個資格。 此外,可以有N名具有特定資格的員工。 顯然,這意味著“ 雇員”和“ 資格”實體共享多對多關(guā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數(shù)據(jù)庫。

數(shù)據(jù)庫設(shè)置:

為了表示ManyToMany關(guān)聯(lián),我們至少需要三個數(shù)據(jù)庫表。 因此,假設(shè)我們有下面的ERD圖表示我們的數(shù)據(jù)庫:

另外,讓我們創(chuàng)建表:

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

創(chuàng)建實體:

現(xiàn)在我們已經(jīng)準備好數(shù)據(jù)庫設(shè)置,讓我們首先創(chuàng)建模型類– 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<>();... }

多對多關(guān)聯(lián)具有兩個方面-擁有方和反向/引用方在關(guān)系的所有者端指定了到數(shù)據(jù)庫的實際物理映射 。 在這里, Employee是擁有的實體,因此我們使用@JoinTable批注定義了實際的物理數(shù)據(jù)庫映射。 @JoinTable批注定義了employee_qualification連接表

@JoinColumn批注指定將用于聯(lián)接表的列。 我們還提到了qualification_id是反向聯(lián)接列。 它僅表示它是指關(guān)系的相反方面,即我們的資格等級。

現(xiàn)在讓我們定義我們的資格實體類:

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

由于Qualification類是關(guān)聯(lián)的引用側(cè)或相反側(cè),因此我們已使用mappingBy屬性引用其所屬側(cè)( Employee )。

同樣我們可以看到,我們在兩個實體中都使用了@ManyToMany注釋。

使用多對多關(guān)聯(lián):

在我們的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();}}

在執(zhí)行上述代碼后,我們的測試數(shù)據(jù)將被插入到employee , qualification和employee_qualification表中。

結(jié)論:

在此迷你教程中,我們研究了如何建立ManyToMany JPA關(guān)聯(lián)。 我們已經(jīng)在普通的XML配置上使用了JPA批注,因為它們使用起來更加方便并且越來越流行。

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

總結(jié)

以上是生活随笔為你收集整理的休眠多对多教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。