JPA - Mối quan hệ thực thể

Chương này sẽ đưa bạn qua các mối quan hệ giữa các Thực thể. Nói chung các mối quan hệ hiệu quả hơn giữa các bảng trong cơ sở dữ liệu. Ở đây, các lớp thực thể được coi là bảng quan hệ (khái niệm của JPA), do đó mối quan hệ giữa các lớp Thực thể như sau:

  • @ManyToOne Relation
  • @OneToMany Relation
  • @OneToOne Relation
  • @ManyToMany Relation

@ManyToOne Relation

Mối quan hệ Nhiều-Một giữa các thực thể: Trong đó một thực thể (cột hoặc tập hợp các cột) được / được tham chiếu với một thực thể khác (cột hoặc tập hợp các cột) chứa các giá trị duy nhất. Trong cơ sở dữ liệu quan hệ, các quan hệ này có thể áp dụng bằng cách sử dụng khóa ngoại / khóa chính giữa các bảng.

Chúng ta hãy xem xét một ví dụ về mối quan hệ giữa các thực thể Nhân viên và Bộ phận. Theo cách đơn hướng, có thể áp dụng mối quan hệ từ Nhân viên đến Bộ phận, Nhiều Người với Một. Điều đó có nghĩa là mỗi bản ghi của nhân viên chứa một id bộ phận, mã này phải là khóa chính trong bảng Bộ phận. Ở đây trong bảng Nhân viên, id Phòng ban là Khóa ngoại.

Sơ đồ giải thích mối quan hệ Nhiều-Một như sau:

Tạo một dự án JPA trong IDE eclipse có tên JPA_Eclipselink_MTO. Tất cả các mô-đun của dự án này được hiển thị như sau:

Tạo thực thể

Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Department {

   @Id 
   @GeneratedValue( strategy=GenerationType.AUTO )

   private int id;
   private String name;

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getName( ){
      return name;
   }

   public void setName( String deptName ){
      this.name = deptName;
   }
}

Tạo thực thể thứ hai trong mối quan hệ này - Lớp thực thể nhân viên có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Employee{

   @Id
   @GeneratedValue( strategy= GenerationType.AUTO ) 	
   
   private int eid;
   private String ename;
   private double salary;
   private String deg;
   
   @ManyToOne
   private Department department;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid)  {
      this.eid = eid;
   }

   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }

   public Department getDepartment() {
      return department;
   }

   public void setDepartment(Department department) {
      this.department = department;
   }
}

Persistence.xml

Tệp Persistence.xml được yêu cầu để cấu hình cơ sở dữ liệu và đăng ký các lớp thực thể.

Persitence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:

<?xml version="1.0" encoding = "UTF-8"?>

<persistence version = "2.0" 
   xmlns = "http://java.sun.com/xml/ns/persistence" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>
      <class>com.tutorialspoint.eclipselink.entity.Department</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value="root"/>
         <property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Các lớp dịch vụ

Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênManyToOne.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:

package com.tutorialspointeclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;

public class ManyToOne {
   public static void main( String[ ] args ) {
   
   EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
   EntityManager entitymanager = emfactory.createEntityManager( );
   entitymanager.getTransaction( ).begin( );

   //Create Department Entity
   Department department = new Department();
   department.setName("Development");
   
   //Store Department
   entitymanager.persist(department);

   //Create Employee1 Entity
   Employee employee1 = new Employee();
   employee1.setEname("Satish");
   employee1.setSalary(45000.0);
   employee1.setDeg("Technical Writer");
   employee1.setDepartment(department);

   //Create Employee2 Entity
   Employee employee2 = new Employee();
   employee2.setEname("Krishna");
   employee2.setSalary(45000.0);
   employee2.setDeg("Technical Writer");
   employee2.setDepartment(department);

   //Create Employee3 Entity
   Employee employee3 = new Employee();
   employee3.setEname("Masthanvali");
   employee3.setSalary(50000.0);
   employee3.setDeg("Technical Writer");
   employee3.setDepartment(department);

   //Store Employees
   entitymanager.persist(employee1);
   entitymanager.persist(employee2);
   entitymanager.persist(employee3);

   entitymanager.getTransaction().commit();
   entitymanager.close();
   emfactory.close();
   }
}

Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra bàn làm việc MySQL. Trong ví dụ này, hai bảng được tạo.

Chuyển truy vấn sau trong giao diện MySQL và kết quả là Department bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from department;

Id	Name
101	Development

Chuyển truy vấn sau trong giao diện MySQL và kết quả là Employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from employee;

Eid Deg                 Ename	        Salary	Department_Id
102 Technical Writer	Satish	        45000	101
103 Technical Writer	Krishna	        45000	101
104 Technical Writer	Masthan Wali	50000	101

Trong bảng trên Deparment_Id là khóa ngoại (trường tham chiếu) từ bảng Department.

@OneToMany Relation

Trong mối quan hệ này, mỗi hàng của một thực thể được tham chiếu đến nhiều bản ghi con trong thực thể khác. Điều quan trọng là hồ sơ con không được có nhiều cha mẹ. Trong mối quan hệ một-nhiều giữa Bảng A và Bảng B, mỗi hàng trong Bảng A được liên kết với 0, 1 hoặc nhiều hàng trong Bảng B.

Chúng ta hãy xem xét ví dụ trên. NếuEmployeeDepartmentlà theo cách một chiều ngược lại, quan hệ là quan hệ Nhiều-Một. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_OTM. Tất cả các mô-đun của dự án này được hiển thị như sau:

Tạo thực thể

Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Department {

    @Id 
    @GeneratedValue( strategy=GenerationType.AUTO )
    
    private int id;
    private String name;
    
    @OneToMany( targetEntity=Employee.class )
    private List employeelist;

    public int getId() {
    	return id;
    }
    
    public void setId(int id) {
    	this.id = id;
    }
    
    public String getName( ) {
    	return name;
    }
    
    public void setName( String deptName ) {
    	this.name = deptName;
    }

    public List getEmployeelist() {
      return employeelist;
    }

   public void setEmployeelist(List employeelist) {
      this.employeelist = employeelist;
   }
}

Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Employee {

   @Id
   @GeneratedValue( strategy= GenerationType.AUTO ) 	

   private int eid;
   private String ename;
   private double salary;
   private String deg;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }

   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }	
}

Persistence.xml

Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:

<?xml version = "1.0" encoding = "UTF-8"?>

<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>
      <class>com.tutorialspoint.eclipselink.entity.Department</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Các lớp dịch vụ

Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênOneToMany.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:

package com.tutorialspointeclipselink.service;

import java.util.List;
import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;

public class OneToMany {
   public static void main(String[] args) {
   
   EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
   EntityManager entitymanager = emfactory.createEntityManager( );
   entitymanager.getTransaction( ).begin( );

   //Create Employee1 Entity
   Employee employee1 = new Employee();
   employee1.setEname("Satish");
   employee1.setSalary(45000.0);
   employee1.setDeg("Technical Writer");

   //Create Employee2 Entity
   Employee employee2 = new Employee();
   employee2.setEname("Krishna");
   employee2.setSalary(45000.0);
   employee2.setDeg("Technical Writer");

   //Create Employee3 Entity
   Employee employee3 = new Employee();
   employee3.setEname("Masthanvali");
   employee3.setSalary(50000.0);
   employee3.setDeg("Technical Writer");

   //Store Employee
   entitymanager.persist(employee1);
   entitymanager.persist(employee2);
   entitymanager.persist(employee3);

   //Create Employeelist
   List<Employee> emplist = new ArrayList();
   emplist.add(employee1);
   emplist.add(employee2);
   emplist.add(employee3);

   //Create Department Entity
   Department department = new Department();
   department.setName("Development");
   department.setEmployeelist(emplist);

   //Store Department
   entitymanager.persist(department);

   entitymanager.getTransaction().commit();
   entitymanager.close();
   emfactory.close();
   }
}

Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Để kiểm tra đầu ra MySQL workbench như sau. Trong dự án này, ba bảng được tạo.

Chuyển truy vấn sau trong giao diện MySQL và kết quả là department_employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from department_Id;

Department_Id	Employee_Eid
254	        251
254	        252
254	        253

Trong bảng trên, các trường deparment_id và worker_id là các khóa ngoại (trường tham chiếu) từ các bảng của bộ phận và nhân viên.

Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng bộ phận ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from department;

Id	Name
254	Development

Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng nhân viên ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from employee;

Eid	Deg	                Ename	       Salary
251	Technical Writer	Satish	       45000
252	Technical Writer	Krishna	       45000
253	Technical Writer	Masthanvali    50000

@OneToOne Relation

Trong mối quan hệ Một-Một, một mục chỉ có thể thuộc về một mục khác. Nó có nghĩa là mỗi hàng của một thực thể được tham chiếu đến một và chỉ một hàng của thực thể khác.

Chúng ta hãy xem xét ví dụ trên. EmployeeDepartmenttheo cách đơn hướng ngược lại, quan hệ là quan hệ Một-Một. Nó có nghĩa là mỗi nhân viên chỉ thuộc về một bộ phận. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_OTO. Tất cả các mô-đun của dự án này được hiển thị như sau:

Tạo thực thể

Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênDepartment.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Department {

   @Id 
   @GeneratedValue( strategy=GenerationType.AUTO )
   private int id;
   private String name;

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getName( ) {
      return name;
   }

   public void setName( String deptName ) {
      this.name = deptName;
   }
}

Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Employee.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Employee {

   @Id
   @GeneratedValue( strategy= GenerationType.AUTO ) 	
   private int eid;
   private String ename;
   private double salary;
   private String deg;

   @OneToOne
   private Department department;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }

   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }

   public Department getDepartment() {
      return department;
   }

   public void setDepartment(Department department) {
      this.department = department;
   }	
}

Persistence.xml

Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:

<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>
      <class>com.tutorialspoint.eclipselink.entity.Department</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
   
   </persistence-unit>
</persistence>

Các lớp dịch vụ

Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênOneToOne.javađược tạo theo gói đã cho. Lớp DAO được hiển thị như sau:

package com.tutorialspointeclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.Department;
import com.tutorialspoint.eclipselink.entity.Employee;

public class OneToOne {
   public static void main(String[] args) {
   
   EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
   EntityManager entitymanager = emfactory.createEntityManager( );
   entitymanager.getTransaction( ).begin( );

   //Create Department Entity
   Department department = new Department();
   department.setName("Development");

   //Store Department
   entitymanager.persist(department);

   //Create Employee Entity
   Employee employee = new Employee();
   employee.setEname("Satish");
   employee.setSalary(45000.0);
   employee.setDeg("Technical Writer");
   employee.setDepartment(department);

   //Store Employee
   entitymanager.persist(employee);

   entitymanager.getTransaction().commit();
   entitymanager.close();
   emfactory.close();
   }
}

Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra MySQL workbench như sau. Trong ví dụ trên, hai bảng được tạo.

Chuyển truy vấn sau trong giao diện MySQL và kết quả là department bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from department

Id	Name
301	Development

Chuyển truy vấn sau trong giao diện MySQL và kết quả là employee bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from employee

Eid	Deg	                Ename	Salary	Department_id
302	Technical Writer	Satish	45000	301

@ManyToMany Relation

Mối quan hệ Nhiều-Nhiều là nơi một hoặc nhiều hàng từ một thực thể được liên kết với nhiều hàng trong thực thể khác.

Chúng ta hãy xem xét một ví dụ về mối quan hệ giữa các thực thể Lớp và Giáo viên. Theo cách hai chiều, cả Lớp và Giáo viên đều có mối quan hệ Nhiều người với Một. Điều đó có nghĩa là mỗi bản ghi của Lớp học được tham chiếu bởi tập hợp Giáo viên (id giáo viên), chúng phải là khóa chính trong bảng Giáo viên và được lưu trữ trong bảng Giáo viên_Class và ngược lại. Ở đây, bảng Teacher_Class chứa cả hai trường Khóa ngoại. Tạo một dự án JPA trong IDE eclipse có tênJPA_Eclipselink_MTM. Tất cả các mô-đun của dự án này được hiển thị như sau:

Tạo thực thể

Làm theo sơ đồ đã cho ở trên để tạo các thực thể. Tạo một gói có tên‘com.tutorialspoin.eclipselink.entity’ Dưới ‘src’gói hàng. Tạo một lớp có tênClas.javatheo gói nhất định. Thực thể Bộ phận lớp được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Clas {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   
   private int cid;
   private String cname;

   @ManyToMany(targetEntity=Teacher.class)
   private Set teacherSet;

   public Clas(){
      super();
   }
   
   public Clas(int cid, String cname, Set teacherSet) {
      super();
      this.cid = cid;
      this.cname = cname;
      this.teacherSet = teacherSet;
   }
   
   public int getCid(){
      return cid;
   }
   
   public void setCid(int cid) {
      this.cid = cid;
   }
   
   public String getCname() {
      return cname;
   }
   
   public void setCname(String cname) {
      this.cname = cname;
   }
   
   public Set getTeacherSet() {
      return teacherSet;
   }
   
   public void setTeacherSet(Set teacherSet) {
      this.teacherSet = teacherSet;
   }	  
}

Tạo thực thể thứ hai trong mối quan hệ này -Lớp thực thể nhân viên, có tên Teacher.java Dưới ‘com.tutorialspoint.eclipselink.entity’gói hàng. Lớp thực thể Nhân viên được hiển thị như sau:

package com.tutorialspoint.eclipselink.entity;

import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Teacher {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   private int tid;
   private String tname;
   private String subject;

   @ManyToMany(targetEntity = Clas.class)
   private Set clasSet;

   public Teacher(){
      super();
   }
   
   public Teacher(int tid, String tname, String subject, Set clasSet) {
      super();
      this.tid = tid;
      this.tname = tname;
      this.subject = subject;
      this.clasSet = clasSet;
   }
   
   public int getTid() {
      return tid;
   }
   
   public void setTid(int tid) {
      this.tid = tid;
   }
   
   public String getTname() {
      return tname;
   }
   
   public void setTname(String tname) {
      this.tname = tname;
   }
   
   public String getSubject() {
      return subject;
   }
   
   public void setSubject(String subject) {
      this.subject = subject;
   }
   
   public Set getClasSet() {
      return clasSet;
   }
   
   public void setClasSet(Set clasSet) {
      this.clasSet = clasSet;
   }
}

Persistence.xml

Persistence.xml sẽ được tạo bởi IDE eclipse trong khi tạo một Dự án JPA. Các chi tiết cấu hình là thông số kỹ thuật của người dùng. Tệp Persence.xml được hiển thị như sau:

<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>
      <class>com.tutorialspoint.eclipselink.entity.Department</class>
      
      <properties>
      <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
      <property name = "javax.persistence.jdbc.user" value = "root"/>
      <property name = "javax.persistence.jdbc.password" value = "root"/>
      <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
      <property name = "eclipselink.logging.level" value = "FINE"/>
      <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
   
   </persistence-unit>
</persistence>

Các lớp dịch vụ

Mô-đun này chứa các lớp dịch vụ, thực hiện phần quan hệ bằng cách sử dụng phần khởi tạo thuộc tính. Tạo một gói dưới‘src’ gói có tên ‘com.tutorialspoint.eclipselink.service’. Lớp DAO có tênManyToMany.javađược tạo theo gói nhất định. Lớp DAO được hiển thị như sau:

package com.tutorialspoint.eclipselink.service;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.Clas;
import com.tutorialspoint.eclipselink.entity.Teacher;

public class ManyToMany {
   public static void main(String[] args) {
   
   EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
   EntityManager entitymanager = emfactory.createEntityManager( );
   entitymanager.getTransaction( ).begin( );

   //Create Clas Entity
   Clas clas1 = new Clas(0, "1st", null);
   Clas clas2 = new Clas(0, "2nd", null);
   Clas clas3 = new Clas(0, "3rd", null);

   //Store Clas
   entitymanager.persist(clas1);
   entitymanager.persist(clas2);
   entitymanager.persist(clas3);

   //Create Clas Set1
   Set<Clas> classSet1 = new HashSet();
   classSet1.add(clas1);
   classSet1.add(clas2);
   classSet1.add(clas3);

   //Create Clas Set2
   Set<Clas> classSet2 = new HashSet();
   classSet2.add(clas3);
   classSet2.add(clas1);
   classSet2.add(clas2);

   //Create Clas Set3
   Set<Clas> classSet3 = new HashSet();
   classSet3.add(clas2);
   classSet3.add(clas3);
   classSet3.add(clas1);

   //Create Teacher Entity
   Teacher teacher1 = new Teacher(0, "Satish","Java",classSet1);
   Teacher teacher2 = new Teacher(0, "Krishna","Adv Java",classSet2);
   Teacher teacher3 = new Teacher(0, "Masthanvali","DB2",classSet3);

   //Store Teacher
   entitymanager.persist(teacher1);
   entitymanager.persist(teacher2);
   entitymanager.persist(teacher3);


   entitymanager.getTransaction( ).commit( );
   entitymanager.close( );
   emfactory.close( );
   }
}

Sau khi biên dịch và thực thi chương trình trên, bạn sẽ nhận được thông báo trong bảng điều khiển của Eclipse IDE. Đối với đầu ra, hãy kiểm tra MySQL workbench như sau. Trong dự án ví dụ này, ba bảng được tạo.

Chuyển truy vấn sau trong giao diện MySQL và kết quả là teacher_clas bảng ở định dạng bảng được hiển thị như sau trong truy vấn.

Select * form teacher_clas;

Teacher _tid	Classet_cid
354	        351
355	        351
356	        351
354	        352
355	        352
356	        352
354	        353
355	        353
356	        353

Trong bảng trên, teacher_tid là khóa ngoại từ bảng giáo viên và classet_cid là khóa ngoại từ bảng lớp. Do đó, các giáo viên khác nhau được phân bổ cho các lớp khác nhau.

Chuyển truy vấn sau trong giao diện MySQL và kết quả của bảng giáo viên ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from teacher;

Tid	Subject	    Tname
354	Java	    Satish
355	Adv Java    Krishna
356	DB2         Masthanvali

Chuyển truy vấn sau trong giao diện MySQL và kết quả là clas bảng ở định dạng bảng được hiển thị như sau trong truy vấn:

Select * from clas;

cid	Cname
351	1st
352	2nd
353	3rd