JPA - отношения сущностей

В этой главе вы познакомитесь с отношениями между Сущностями. Обычно отношения между таблицами в базе данных более эффективны. Здесь классы сущностей рассматриваются как реляционные таблицы (концепция JPA), поэтому отношения между классами сущностей следующие:

  • @ManyToOne Отношение
  • @OneToMany Relation
  • @OneToOne Отношение
  • @ManyToMany Relation

@ManyToOne Отношение

Отношение «многие-к-одному» между объектами: когда один объект (столбец или набор столбцов) ссылается / ссылается на другой объект (столбец или набор столбцов), который содержит уникальные значения. В реляционных базах данных эти отношения применимы с использованием внешнего ключа / первичного ключа между таблицами.

Рассмотрим пример связи между сущностями Сотрудник и Отдел. В однонаправленном порядке, от сотрудника к отделу, применимо отношение «многие-к-одному». Это означает, что каждая запись сотрудника содержит один идентификатор отдела, который должен быть первичным ключом в таблице отдела. Здесь, в таблице сотрудников, идентификатор отдела - это внешний ключ.

Диаграмма объясняет отношение многие-к-одному следующим образом:

Создайте проект JPA в eclipse IDE с именем JPA_Eclipselink_MTO. Все модули этого проекта показаны следующим образом:

Создание сущностей

Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем‘com.tutorialspoin.eclipselink.entity’ под ‘src’пакет. Создайте класс с именемDepartment.javaпод данным пакетом. Сущность класса Department отображается следующим образом:

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

Создайте вторую сущность в этом отношении - класс сущности Employee с именем Employee.java под ‘com.tutorialspoint.eclipselink.entity’пакет. Класс сущности Employee показан следующим образом:

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

Файл Persistence.xml необходим для настройки базы данных и регистрации классов сущностей.

Persitence.xml будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:

<?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>

Классы обслуживания

Этот модуль содержит классы обслуживания, реализующие реляционную часть с помощью инициализации атрибута. Создать пакет под‘src’ пакет назван ‘com.tutorialspoint.eclipselink.service’. Класс DAO с именемManyToOne.javaсоздается под данным пакетом. Класс DAO показан следующим образом:

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

После компиляции и выполнения указанной выше программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте верстак MySQL. В этом примере созданы две таблицы.

Передайте следующий запрос в интерфейсе MySQL и результат Department Таблица в табличном формате отображается в запросе следующим образом:

Select * from department;

Id	Name
101	Development

Передайте следующий запрос в интерфейсе MySQL и результат Employee Таблица в табличном формате отображается в запросе следующим образом:

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

В приведенной выше таблице Deparment_Id - это внешний ключ (поле ссылки) из таблицы Department.

@OneToMany Relation

В этой связи каждая строка одной сущности ссылается на множество дочерних записей в другой сущности. Важно то, что дочерние записи не могут иметь нескольких родителей. В отношении «один ко многим» между таблицами A и B каждая строка в таблице A связана с 0, 1 или многими строками в таблице B.

Рассмотрим приведенный выше пример. ЕслиEmployee и Departmentв обратном однонаправленном порядке, отношение - это отношение "многие-к-одному". Создайте проект JPA в Eclipse IDE с именемJPA_Eclipselink_OTM. Все модули этого проекта показаны следующим образом:

Создание сущностей

Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем‘com.tutorialspoin.eclipselink.entity’ под ‘src’пакет. Создайте класс с именемDepartment.javaпод данным пакетом. Сущность класса Department отображается следующим образом:

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

Создайте вторую сущность в этом отношении - класс сущности «Сотрудник» с именем Employee.java под ‘com.tutorialspoint.eclipselink.entity’пакет. Класс сущности Employee показан следующим образом:

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 будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:

<?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>

Классы обслуживания

Этот модуль содержит классы обслуживания, реализующие реляционную часть с помощью инициализации атрибута. Создать пакет под‘src’ пакет назван ‘com.tutorialspoint.eclipselink.service’. Класс DAO с именемOneToMany.javaсоздается под данным пакетом. Класс DAO показан следующим образом:

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

После компиляции и выполнения вышеуказанной программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте верстак MySQL следующим образом. В этом проекте созданы три таблицы.

Передайте следующий запрос в интерфейсе MySQL и результат department_employee Таблица в табличном формате отображается в запросе следующим образом:

Select * from department_Id;

Department_Id	Employee_Eid
254	        251
254	        252
254	        253

В приведенной выше таблице поля deparment_id и employee_id являются внешними ключами (ссылочными полями) из таблиц отделов и сотрудников.

Передайте следующий запрос в интерфейсе MySQL, и результат таблицы отделов в табличном формате будет показан в запросе следующим образом:

Select * from department;

Id	Name
254	Development

Передайте следующий запрос в интерфейсе MySQL, и результат таблицы сотрудников в табличном формате будет показан в запросе следующим образом:

Select * from employee;

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

@OneToOne Отношение

В отношении «один к одному» один элемент может принадлежать только одному другому элементу. Это означает, что каждая строка одного объекта относится к одной и только одной строке другого объекта.

Рассмотрим приведенный выше пример. Employee и Departmentв обратном однонаправленном порядке отношение является отношением «один к одному». Это означает, что каждый сотрудник принадлежит только к одному отделу. Создайте проект JPA в eclipse IDE с именемJPA_Eclipselink_OTO. Все модули этого проекта показаны следующим образом:

Создание сущностей

Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем‘com.tutorialspoin.eclipselink.entity’ под ‘src’пакет. Создайте класс с именемDepartment.javaпод данным пакетом. Сущность класса Department отображается следующим образом:

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

Создайте вторую сущность в этом отношении - класс сущности «Сотрудник» с именем Employee.java под ‘com.tutorialspoint.eclipselink.entity’пакет. Класс сущности Employee показан следующим образом:

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 будет создан IDE eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:

<?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>

Классы обслуживания

Этот модуль содержит классы обслуживания, реализующие реляционную часть с помощью инициализации атрибута. Создать пакет под‘src’ пакет назван ‘com.tutorialspoint.eclipselink.service’. Класс DAO с именемOneToOne.javaсоздается под данным пакетом. Класс DAO показан следующим образом:

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

После компиляции и выполнения указанной выше программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте рабочую среду MySQL следующим образом. В приведенном выше примере созданы две таблицы.

Передайте следующий запрос в интерфейсе MySQL и результат department Таблица в табличном формате отображается в запросе следующим образом:

Select * from department

Id	Name
301	Development

Передайте следующий запрос в интерфейсе MySQL и результат employee Таблица в табличном формате отображается в запросе следующим образом:

Select * from employee

Eid	Deg	                Ename	Salary	Department_id
302	Technical Writer	Satish	45000	301

@ManyToMany Relation

Отношение «многие-ко-многим» - это когда одна или несколько строк из одной сущности связаны с более чем одной строкой в ​​другой сущности.

Давайте рассмотрим пример связи между сущностями Класс и Учитель. Двунаправленным образом и Класс, и Учитель связаны отношением «многие-к-одному». Это означает, что каждая запись класса ссылается на набор учителей (идентификаторы учителей), которые должны быть первичными ключами в таблице учителя и храниться в таблице Teacher_Class и наоборот. Здесь таблица Teachers_Class содержит оба поля внешнего ключа. Создайте проект JPA в Eclipse IDE с именемJPA_Eclipselink_MTM. Все модули этого проекта показаны следующим образом:

Создание сущностей

Следуйте приведенной выше схеме для создания сущностей. Создайте пакет с именем‘com.tutorialspoin.eclipselink.entity’ под ‘src’пакет. Создайте класс с именемClas.javaпод данным пакетом. Сущность класса Department отображается следующим образом:

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

Создайте вторую сущность в этом отношении - класс сущности «Сотрудник» с именем Teacher.java под ‘com.tutorialspoint.eclipselink.entity’пакет. Класс сущности Employee показан следующим образом:

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 будет создан средой разработки eclipse при создании проекта JPA. Детали конфигурации являются пользовательскими спецификациями. Файл persistence.xml отображается следующим образом:

<?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>

Классы обслуживания

Этот модуль содержит классы обслуживания, реализующие реляционную часть с помощью инициализации атрибута. Создать пакет под‘src’ пакет назван ‘com.tutorialspoint.eclipselink.service’. Класс DAO с именемManyToMany.javaсоздается под данным пакетом. Класс DAO показан следующим образом:

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

После компиляции и выполнения указанной выше программы вы получите уведомления на панели консоли Eclipse IDE. Для вывода проверьте рабочую среду MySQL следующим образом. В этом примере проекта созданы три таблицы.

Передайте следующий запрос в интерфейсе MySQL и результат teacher_clas Таблица в табличном формате отображается в запросе следующим образом.

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

В приведенной выше таблице учитель_tid - это внешний ключ из таблицы учителя, а classet_cid - внешний ключ из таблицы класса. Поэтому разные учителя распределяются в разные классы.

Передайте следующий запрос в интерфейсе MySQL, и результат таблицы учителя в табличном формате будет показан в запросе следующим образом:

Select * from teacher;

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

Передайте следующий запрос в интерфейсе MySQL и результат clas Таблица в табличном формате отображается в запросе следующим образом:

Select * from clas;

cid	Cname
351	1st
352	2nd
353	3rd