JPA: administradores de entidades

Este capítulo lo lleva a través de un ejemplo simple con JPA. Consideremos la gestión de empleados como ejemplo. Significa que la administración de empleados está creando, actualizando, encontrando y eliminando a un empleado. Como se mencionó anteriormente, estamos usando la base de datos MySQL para operaciones de base de datos.

Los módulos principales de este ejemplo son los siguientes:

  • Model or POJO

    Employee.java

  • Persistence

    Persistence.xml

  • Service

    CreatingEmployee.java

    UpdatingEmployee.java

    FindingEmployee.java

    DeletingEmployee.java

Tomemos la jerarquía de paquetes que hemos utilizado en la instalación de JPA con Eclipselink. Siga la jerarquía de este ejemplo como se muestra a continuación:

Creando Entidades

Las entidades no son más que beans o modelos, en este ejemplo usaremos Employee como entidad. eid, ename, salary, y degson los atributos de esta entidad. Contiene métodos predeterminados de constructor, establecedor y captador de esos atributos.

En la jerarquía que se muestra arriba, cree un paquete llamado ‘com.tutorialspoint.eclipselink.entity’, debajo ‘src’Paquete (fuente). Crea una clase llamadaEmployee.java en el paquete dado de la siguiente manera:

package com.tutorialspoint.eclipselink.entity;

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

@Entity
@Table
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;
   }
   
   @Override
   public String toString() {
      return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]";
   }
}

En el código anterior, hemos utilizado la anotación @Entity para hacer que esta clase POJO sea una entidad.

Antes de pasar al siguiente módulo, necesitamos crear una base de datos para la entidad relacional, que registrará la base de datos en persistence.xmlarchivo. Abra el banco de trabajo MySQL y escriba query de la siguiente manera:

create database jpadb
use jpadb

Persistence.xml

Este módulo juega un papel crucial en el concepto de JPA. En este archivo xml registraremos la base de datos y especificaremos la clase de entidad.

En la jerarquía de paquetes mostrada anteriormente, persistence.xml en el paquete de contenido JPA es el 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.tutorialspoint.eclipselink.entity.Employee</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>

En el xml anterior, la etiqueta <persistence-unit> se define con un nombre específico para la persistencia JPA. La etiqueta <class> define la clase de entidad con el nombre del paquete. La etiqueta <properties> define todas las propiedades y la etiqueta <property> define cada propiedad, como el registro de la base de datos, la especificación de URL, el nombre de usuario y la contraseña. Estas son las propiedades de Eclipselink. Este archivo configurará la base de datos.

Operaciones de persistencia

Las operaciones de persistencia se utilizan contra la base de datos y son load y storeoperaciones. En un componente empresarial, todas las operaciones de persistencia se incluyen en clases de servicio.

En la jerarquía de paquetes que se muestra arriba, cree un paquete llamado ‘com.tutorialspoint.eclipselink.service’, debajo ‘src’(fuente) paquete. Todas las clases de servicio denominadas CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java y DeleteEmployee.java. viene bajo el paquete dado de la siguiente manera:

Crear empleado

Creando una clase de Empleado nombrada como CreateEmployee.java como sigue:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class CreateEmployee {

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

      Employee employee = new Employee( ); 
      employee.setEid( 1201 );
      employee.setEname( "Gopal" );
      employee.setSalary( 40000 );
      employee.setDeg( "Technical Manager" );
      
      entitymanager.persist( employee );
      entitymanager.getTransaction( ).commit( );

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

En el código anterior el createEntityManagerFactory ()crea una unidad de persistencia proporcionando el mismo nombre único que proporcionamos para la unidad de persistencia en el archivo persistent.xml. El objeto entitymanagerfactory creará la instancia de entitymanger utilizandocreateEntityManager ()método. El objeto entitymanager crea una instancia de transacción de entidad para la gestión de transacciones. Al usar el objeto entitymanager, podemos conservar las entidades en la base de datos.

Después de la compilación y ejecución del programa anterior, recibirá notificaciones de la biblioteca eclipselink en el panel de la consola de eclipse IDE.

Para obtener resultados, abra el banco de trabajo MySQL y escriba las siguientes consultas.

use jpadb
select * from employee

La tabla de la base de datos afectada llamada employee se mostrará en formato tabular de la siguiente manera:

Eid Ename Salario Deg
1201 Gopal 40000 Gerente técnico

Actualizar empleado

Para actualizar un empleado, necesitamos obtener la base de datos del formulario de registro, hacer cambios y finalmente confirmarlo. La clase nombradaUpdateEmployee.java se muestra de la siguiente manera:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class UpdateEmployee {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      Employee employee = entitymanager.find( Employee.class, 1201 );
      
      //before update
      System.out.println( employee );
      employee.setSalary( 46000 );
      entitymanager.getTransaction( ).commit( );
      
      //after update
      System.out.println( employee );
      entitymanager.close();
      emfactory.close();
   }
}

Después de la compilación y ejecución del programa anterior, recibirá notificaciones de la biblioteca Eclipselink en el panel de la consola de eclipse IDE.

Para obtener resultados, abra el banco de trabajo MySQL y escriba las siguientes consultas.

use jpadb
select * from employee

La tabla de la base de datos afectada llamada employee se mostrará en formato tabular de la siguiente manera:

Eid Ename Salario Deg
1201 Gopal 46000 Gerente técnico

El salario del empleado, 1201 se actualiza a 46000.

Encontrar empleado

Para encontrar un empleado, obtendremos un registro de la base de datos y lo mostraremos. En esta operación, EntityTransaction no está involucrado, no se aplica ninguna transacción mientras se recupera un registro.

La clase nombrada FindEmployee.java como sigue.

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class FindEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager();
      Employee employee = entitymanager.find( Employee.class, 1201 );

      System.out.println("employee ID = " + employee.getEid( ));
      System.out.println("employee NAME = " + employee.getEname( ));
      System.out.println("employee SALARY = " + employee.getSalary( ));
      System.out.println("employee DESIGNATION = " + employee.getDeg( ));
   }
}

Después de la compilación y ejecución del programa anterior, obtendrá la salida de la biblioteca Eclipselink en el panel de la consola de eclipse IDE de la siguiente manera:

employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager

Eliminar empleado

Para eliminar un empleado, primero buscaremos el registro y luego lo eliminaremos. Aquí EntityTransaction juega un papel importante.

La clase nombrada DeleteEmployee.java como sigue:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class DeleteEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      
      Employee employee = entitymanager.find( Employee.class, 1201 );
      entitymanager.remove( employee );
      entitymanager.getTransaction( ).commit( );
      entitymanager.close( );
      emfactory.close( );
   }
}

Después de la compilación y ejecución del programa anterior, recibirá notificaciones de la biblioteca Eclipselink en el panel de la consola de eclipse IDE.

Para obtener resultados, abra el banco de trabajo MySQL y escriba las siguientes consultas.

use jpadb
select * from employee

La base de datos afectada llamada employee tendrá registros nulos.

Después de completar todos los módulos en este ejemplo, la jerarquía de paquetes y archivos se muestra a continuación: