JPA - Relaciones de la Entidad


Advertisements

Este capítulo le lleva a través de las relaciones entre las entidades. Generalmente las relaciones son más efectivas entre las tablas en la base de datos. Aquí las clases de entidad son tratadas como tablas relacionales (concepto de JPA), por lo tanto, las relaciones entre las clases de entidad son los siguientes:

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

@ManyToOne Relation

Existe relación Many-To-One entre las entidades donde se hace referencia a una entidad (columna o conjunto de columnas) con valores únicos que contienen de otra entidad (columna o conjunto de columnas). En bases de datos relacionales, estas relaciones se aplican mediante el uso de clave primaria clave externa entre las tablas.

Nos permite considerar un ejemplo de una relación entre entidades empleado y departamento. De manera unidireccional, es decir, de empleado al Departamento, Many-To-One relación es aplicable. Eso significa que cada registro de empleado contiene un id de departamento, que debe ser una clave principal en la tabla Department. Aquí en la tabla Employee, Departamento id es la clave foránea.

El siguiente diagrama muestra el Many-To-One relación entre las dos tablas.

Relación muchos a uno

Crear un proyecto JPA en eclipse que IDE llamado JPA_Eclipselink_MTO. Todos los módulos de este proyecto se discuten más abajo.

Creación de Entidades

Siga el anterior dado diagrama para la creación de entidades. Crear un paquete denominado ‘com.tutorialspoin.eclipselink.entity’ bajo ‘src’ paquete. Crear una clase denominada Department.java bajo dado paquete. La clase entidad departamento se muestra como sigue:

package com.howcodex.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;
   }
}

Crear la segunda entidad en esta relación - clase de entidad empleado llamado Employee.java bajo ‘com.howcodex.eclipselink.entity’ paquete. La clase de entidad empleado se muestra como sigue:

package com.howcodex.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 archivo es necesario para configurar la base de datos y el registro de las clases de entidad.

Persitence.xml será creado por el eclipse IDE durante la creación de un proyecto de JPA. Los detalles de configuración son las especificaciones del usuario. El archivo persistence.xml se muestra como sigue:


<?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.howcodex.eclipselink.entity.Employee</class>
      <class>com.howcodex.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>

Clases de servicio

Este módulo contiene las clases de servicio, que implementa la parte relacional con la inicialización de atributo. Crear un paquete bajo ‘src’ paquete denominado ‘com.howcodex.eclipselink.service’. La clase DAO ManyToOne.java se crea bajo dado paquete. La clase DAO se muestra como sigue:

package com.howcodexeclipselink.service;

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

import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
   }
}

Después de compilar y ejecutar el programa anterior, usted recibirá notificaciones en el panel de la consola de Eclipse IDE. Para la salida, verifique MySQL workbench. En este ejemplo, se crean dos tablas.

Pasar la siguiente consulta en interfaz MySQL y el resultado de Departamento mesa se mostrará como sigue:

Select * from department
ID Nombre
101 Desarrollo

Pase a la siguiente consulta en interfaz MySQL y se visualizará el resultado de la tabla Empleado de la siguiente manera.

Select * from employee
Eid Deg Ename Salary Department_Id
102 Technical Writer Satish 45000 101
103 Technical Writer Krishna 45000 101
104 Technical Writer Masthanwali 50000 101

En la tabla anterior Department_Id es la clave foránea (campo de referencia) de la tabla Department.

@OneToMany Relación

En esta relación, cada fila de una entidad se hace referencia a los muchos registros secundarios en otra entidad. Lo importante es que los registros secundarios no pueden tener varios padres. En una relación uno a varios entre la tabla A y B de la tabla, cada fila en la tabla A puede ser vinculado a una o varias filas en la tabla B.

Consideremos el ejemplo de arriba. Supongamos que empleado y mesas del Departamento en el ejemplo anterior se conectan de manera unidireccional inversa, entonces la relación se convierte en uno de varios relación. Crear un proyecto JPA en eclipse IDE llamado JPA_Eclipselink_OTM. Todos los módulos de este proyecto se discuten más abajo.

Creación de Entidades

Siga el anterior dado diagrama para la creación de entidades. Crear un paquete denominado ‘com.tutorialspoin.eclipselink.entity’ bajo ‘src’ paquete. Crear una clase denominada Department.java bajo dado paquete. La clase entidad departamento se muestra como sigue:

package com.howcodex.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;
   }
}

Crear la segunda entidad en esta relación-clase de entidad empleado, denominada Employee.java bajo ‘com.howcodex.eclipselink.entity’ paquete. La clase de entidad empleado se muestra como sigue:

package com.howcodex.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

The persistence.xml archivo es la siguiente:

<?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.howcodex.eclipselink.entity.Employee</class>
      <class>com.howcodex.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>

Clases de servicio

Este módulo contiene las clases de servicio, que implementa la parte relacional con la inicialización de atributo. Crear un paquete bajo ‘src’ paquete denominado ‘com.howcodex.eclipselink.service’. La clase DAO llamada OneToMany.java se crea bajo dado paquete. La clase DAO se muestra como sigue:

package com.howcodexeclipselink.service;

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

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

import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
   }
}

Después de la compilación y ejecución del programa anterior usted recibirá notificaciones en el panel de la consola de Eclipse IDE. Para la salida de comprobar MySQL workbench de la siguiente manera.

En este proyecto se crean las tres tablas. Pase la siguiente consulta en interfaz MySQL y el resultado de la tabla department_employee se mostrará como sigue:

Select * from department_Id;
Department_ID Employee_Eid
254 251
254 252
254 253

En la tabla anterior, department_id y employee_id son las claves externas (campos de referencia) de departamento y empleado tablas.

Pase la siguiente consulta en interfaz MySQL y el resultado de la tabla department se mostrará en un formato tabular de la siguiente manera.

Select * from department;
ID Nombre
254 Desarrollo

Pase a la siguiente consulta en interfaz MySQL y se visualizará el resultado de la tabla employee de la siguiente manera:

Select * from employee;
Eid Deg Ename Salary
251 Technical Writer Satish 45000
252 Technical Writer Krishna 45000
253 Technical Writer Masthanwali 50000

@OneToOne Relation

En una relación uno-a-uno, un elemento puede vincularse al único otro elemento. Significa que cada fila de una entidad se refiere a una y sólo una fila de otra entidad.

Nos permite considerar el ejemplo anterior. Empleado y Departamento de manera unidireccional inversa, la relación es relación uno-a-uno. Significa que cada empleado pertenece al Departamento de sola. Crear un proyecto JPA en eclipse IDE llamado JPA_Eclipselink_OTO. Todos los módulos de este proyecto se examinan a continuación.

Creación de entidades

Siga el anterior dado diagrama para la creación de entidades. Crear un paquete denominado ‘com.tutorialspoin.eclipselink.entity’ bajo ‘src’ paquete. Crear una clase denominada Department.java bajo dado el paquete. La clase entidad departamento se muestra como sigue:

package com.howcodex.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;
    }
}

Crear la segunda entidad en esta relación-clase de entidad Employee, denominada Employee.java en paquete 'com.howcodex.eclipselink.entity'. La clase de entidad empleado se muestra como sigue:

package com.howcodex.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 archivo de la siguiente manera:

<?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.howcodex.eclipselink.entity.Employee</class>
      <class>com.howcodex.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>

Clases de servicio

Crear un paquete debajo del paquete 'src' llamado 'com.howcodex.eclipselink.service'. La clase DAO llamada OneToOne.java se crea bajo el paquete determinado. La clase DAO se muestra como sigue:

package com.howcodexeclipselink.service;

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

import com.howcodex.eclipselink.entity.Department;
import com.howcodex.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();
   }
}

Después de la compilación y ejecución del programa anterior usted recibirá notificaciones en el panel de la consola de Eclipse IDE. Para la salida, compruebe los siguientes MySQL workbench.

En el ejemplo anterior, se crean dos tablas. Pase la siguiente consulta en interfaz MySQL y se visualizará el resultado de la tabla department de la siguiente manera:

Select * from department
ID nombre
301 desarrollo

Pase la siguiente consulta en interfaz MySQL y se visualizará el resultado de la tabla empleado de la siguiente manera:

Select * from employee
Eid Deg Ename Salary Department_id
302 Technical Writer Satish 45000 301

@ManyToMany Relation

Relación de varios a varios es donde una o más filas de una entidad se asocian a más de una fila en otra entidad.

Vamos a considerar un ejemplo de una relación entre dos entidades: clase y profesor. De manera bidireccional, tanto clase como profesor tienen muchos a uno relación. Que significa que cada registro de clase es referido por el profesor (ids de profesor), que debe ser primaria llaves en la mesa del profesor y almacenados en la tabla Teacher_Class y viceversa. Aquí, la tabla Teachers_Class contiene los campos claves extranjeros. Crear un proyecto JPA en eclipse IDE llamado JPA_Eclipselink_MTM. Todos los módulos de este proyecto se examinan a continuación.

Muchos a muchos Relación

Creación de entidades

Crear entidades siguiendo el esquema que se muestra en el diagrama de arriba. Crear un paquete denominado 'com.tutorialspoin.eclipselink.entity' bajo 'src' paquete. Crear una clase denominada Clas.java bajo dado el paquete. La clase entidad departamento se muestra como sigue:

package com.howcodex.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;
   }
}

Crear la segunda entidad en esta relación-clase de entidad Employee, denominada Teacher.java en paquete 'com.howcodex.eclipselink.entity'. La clase de entidad empleado se muestra como sigue:

package com.howcodex.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 archivo de la siguiente manera:

<?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.howcodex.eclipselink.entity.Employee</class>
      <class>com.howcodex.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>

Clases de servicio

Crear un paquete debajo del paquete 'src' llamado 'com.howcodex.eclipselink.service'. La clase DAO llamada ManyToMany.java se crea bajo dado paquete. La clase DAO se muestra como sigue:

package com.howcodex.eclipselink.service;

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

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

import com.howcodex.eclipselink.entity.Clas;
import com.howcodex.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( );
   }
}

En este proyecto de ejemplo, se crean las tres tablas. Pase la siguiente consulta en interfaz MySQL y el resultado de la tabla teacher_clas se mostrará como sigue:

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

En la tabla anterior teacher_tid es la clave externa de la tabla maestra, y classet_cid es la clave externa de la tabla de la clase. Por lo tanto diferentes maestros se asignan a diferentes clase

Pase la siguiente consulta en interfaz MySQL y el resultado de la mesa del profesor se mostrará como sigue:

Select * from teacher
Tid Subject Tname
354 Java Satish
355 Adv Java Krishna
356 DB2 Masthanvali

Pase la siguiente consulta en interfaz MySQL y el resultado de la clase tabla aparecerá de la siguiente manera:

Select * from clas
Cid Cname
351 1st
352 2nd
353 3rd
Advertisements