JPA - Gestores de Entidade

Este capítulo apresenta um exemplo simples com JPA. Vamos considerar a gestão de funcionários como exemplo. Isso significa que a gestão de funcionários está criando, atualizando, localizando e excluindo um funcionário. Conforme mencionado acima, estamos usando o banco de dados MySQL para operações de banco de dados.

Os principais módulos para este exemplo são os seguintes:

  • Model or POJO

    Employee.java

  • Persistence

    Persistence.xml

  • Service

    CreatingEmployee.java

    UpdatingEmployee.java

    FindingEmployee.java

    DeletingEmployee.java

Tomemos a hierarquia de pacotes que usamos na instalação do JPA com o Eclipselink. Siga a hierarquia para este exemplo conforme abaixo:

Criando Entidades

Entidades nada mais são do que feijões ou modelos, neste exemplo usaremos Employee como entidade. eid, ename, salary, e degsão os atributos desta entidade. Ele contém os métodos construtor, setter e getter padrão desses atributos.

Na hierarquia mostrada acima, crie um pacote chamado ‘com.tutorialspoint.eclipselink.entity’, debaixo ‘src’Pacote (fonte). Crie uma classe chamadaEmployee.java sob determinado pacote da seguinte forma:

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 + "]";
   }
}

No código acima, usamos a anotação @Entity para tornar essa classe POJO uma entidade.

Antes de ir para o próximo módulo, precisamos criar banco de dados para a entidade relacional, que irá registrar o banco de dados em persistence.xmlArquivo. Abra o ambiente de trabalho MySQL e digite a consulta da seguinte maneira:

create database jpadb
use jpadb

Persistence.xml

Este módulo desempenha um papel crucial no conceito de JPA. Neste arquivo xml iremos registrar o banco de dados e especificar a classe de entidade.

Na hierarquia de pacotes mostrada acima, persistence.xml no pacote de conteúdo JPA é o seguinte:

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

No xml acima, a tag <persistence-unit> é definida com um nome específico para persistência JPA. A tag <class> define a classe de entidade com o nome do pacote. A tag <properties> define todas as propriedades e a tag <property> define cada propriedade, como registro de banco de dados, especificação de URL, nome de usuário e senha. Estas são as propriedades do Eclipselink. Este arquivo irá configurar o banco de dados.

Operações de Persistência

As operações de persistência são usadas no banco de dados e são load e storeoperações. Em um componente de negócios, todas as operações de persistência se enquadram nas classes de serviço.

Na hierarquia de pacotes mostrada acima, crie um pacote chamado ‘com.tutorialspoint.eclipselink.service’, debaixo ‘src’pacote (fonte). Todas as classes de serviço nomeadas como CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java e DeleteEmployee.java. vem no pacote fornecido da seguinte forma:

Criar funcionário

Criação de uma classe Employee chamada CreateEmployee.java do seguinte modo:

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

No código acima o createEntityManagerFactory ()cria uma unidade de persistência fornecendo o mesmo nome exclusivo que fornecemos para a unidade de persistência no arquivo persistent.xml. O objeto entitymanagerfactory criará a instância do entitymanger usandocreateEntityManager ()método. O objeto entitymanager cria uma instância entitytransaction para gerenciamento de transações. Usando o objeto entitymanager, podemos persistir entidades no banco de dados.

Após a compilação e execução do programa acima, você receberá notificações da biblioteca eclipselink no painel do console do Eclipse IDE.

Para obter o resultado, abra o ambiente de trabalho MySQL e digite as seguintes consultas.

use jpadb
select * from employee

A tabela de banco de dados afetada chamada employee será mostrado em um formato tabular da seguinte forma:

Eid Ename Salário Grau
1201 Gopal 40.000 Gerente técnico

Funcionário de atualização

Para atualizar um funcionário, precisamos obter o banco de dados do formulário de registro, fazer alterações e, finalmente, confirmá-lo. A classe chamadaUpdateEmployee.java é mostrado como segue:

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

Após a compilação e execução do programa acima, você receberá notificações da biblioteca Eclipselink no painel do console do Eclipse IDE.

Para obter o resultado, abra o ambiente de trabalho MySQL e digite as seguintes consultas.

use jpadb
select * from employee

A tabela de banco de dados afetada chamada employee será mostrado em um formato tabular da seguinte forma:

Eid Ename Salário Grau
1201 Gopal 46000 Gerente técnico

O salário do empregado, 1.201, é atualizado para 46.000.

Encontrar funcionário

Para encontrar um funcionário, obteremos o registro do banco de dados e o exibiremos. Nesta operação, EntityTransaction não está envolvida, nenhuma transação é aplicada ao recuperar um registro.

A classe chamada FindEmployee.java do seguinte modo.

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

Após a compilação e execução do programa acima, você obterá a saída da biblioteca Eclipselink no painel do console do Eclipse IDE da seguinte forma:

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

Excluindo Funcionário

Para excluir um funcionário, primeiro encontraremos o registro e, em seguida, o excluiremos. Aqui, EntityTransaction desempenha um papel importante.

A classe chamada DeleteEmployee.java do seguinte modo:

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

Após a compilação e execução do programa acima, você receberá notificações da biblioteca Eclipselink no painel do console do Eclipse IDE.

Para obter o resultado, abra o ambiente de trabalho MySQL e digite as seguintes consultas.

use jpadb
select * from employee

O banco de dados afetado chamado employee terá registros nulos.

Após a conclusão de todos os módulos neste exemplo, a hierarquia do pacote e do arquivo é mostrada da seguinte forma: