JPA - Gestionnaires d'entités

Ce chapitre vous présente un exemple simple avec JPA. Prenons l'exemple de la gestion des employés. Cela signifie que la direction des employés crée, met à jour, recherche et supprime un employé. Comme mentionné ci-dessus, nous utilisons la base de données MySQL pour les opérations de base de données.

Les principaux modules de cet exemple sont les suivants:

  • Model or POJO

    Employee.java

  • Persistence

    Persistence.xml

  • Service

    CreatingEmployee.java

    UpdatingEmployee.java

    FindingEmployee.java

    DeletingEmployee.java

Prenons la hiérarchie des packages que nous avons utilisée dans l'installation JPA avec Eclipselink. Suivez la hiérarchie de cet exemple comme ci-dessous:

Créer des entités

Les entités ne sont rien d'autre que des beans ou des modèles, dans cet exemple nous utiliserons Employee en tant qu'entité. eid, ename, salary, et degsont les attributs de cette entité. Il contient les méthodes constructeur, setter et getter par défaut de ces attributs.

Dans la hiérarchie ci-dessus, créez un package nommé ‘com.tutorialspoint.eclipselink.entity’, en dessous de ‘src’(Source) package. Créez une classe nomméeEmployee.java sous le paquet donné comme suit:

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

Dans le code ci-dessus, nous avons utilisé l'annotation @Entity pour faire de cette classe POJO une entité.

Avant de passer au module suivant, nous devons créer une base de données pour l'entité relationnelle, qui enregistrera la base de données dans persistence.xmlfichier. Ouvrez MySQL workbench et tapez la requête comme suit:

create database jpadb
use jpadb

Persistence.xml

Ce module joue un rôle crucial dans le concept de JPA. Dans ce fichier xml, nous enregistrerons la base de données et spécifierons la classe d'entité.

Dans la hiérarchie de packages illustrée ci-dessus, persistence.xml sous JPA Content package est la suivante:

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

Dans le xml ci-dessus, la balise <persistence-unit> est définie avec un nom spécifique pour la persistance JPA. La balise <class> définit la classe d'entité avec le nom du package. La balise <properties> définit toutes les propriétés et la balise <property> définit chaque propriété telle que l'enregistrement de la base de données, la spécification d'URL, le nom d'utilisateur et le mot de passe. Ce sont les propriétés Eclipselink. Ce fichier configurera la base de données.

Opérations de persistance

Les opérations de persistance sont utilisées contre la base de données et sont load et storeopérations. Dans un composant métier, toutes les opérations de persistance relèvent des classes de service.

Dans la hiérarchie de packages illustrée ci-dessus, créez un package nommé ‘com.tutorialspoint.eclipselink.service’, en dessous de ‘src’(source) package. Toutes les classes de service nommées CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java et DeleteEmployee.java. relève du package donné comme suit:

Créer un employé

Création d'une classe Employee nommée CreateEmployee.java comme suit:

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

Dans le code ci-dessus, le createEntityManagerFactory ()crée une unité de persistance en fournissant le même nom unique que celui fourni pour l'unité de persistance dans le fichier persistent.xml. L'objet entitymanagerfactory créera l'instance entitymanger en utilisantcreateEntityManager ()méthode. L'objet entitymanager crée une instance entitytransaction pour la gestion des transactions. En utilisant l'objet entitymanager, nous pouvons conserver les entités dans la base de données.

Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque eclipselink sur le panneau de la console de l'EDI eclipse.

Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.

use jpadb
select * from employee

La table de base de données affectée nommée employee sera affiché dans un format tabulaire comme suit:

Eid Ename Un salaire Degré
1201 Gopal 40000 Directeur technique

Mettre à jour l'employé

Pour mettre à jour un employé, nous devons obtenir la base de données du formulaire d'enregistrement, apporter des modifications et enfin la valider. La classe nomméeUpdateEmployee.java s'affiche comme suit:

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

Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse.

Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.

use jpadb
select * from employee

La table de base de données affectée nommée employee sera affiché dans un format tabulaire comme suit:

Eid Ename Un salaire Degré
1201 Gopal 46 000 Directeur technique

Le salaire de l'employé, 1201 est mis à jour à 46000.

Trouver un employé

Pour trouver un employé, nous allons obtenir un enregistrement de la base de données et l'afficher. Dans cette opération, EntityTransaction n'est pas impliquée, aucune transaction n'est appliquée lors de la récupération d'un enregistrement.

La classe nommée FindEmployee.java comme suit.

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

Après la compilation et l'exécution du programme ci-dessus, vous obtiendrez la sortie de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse comme suit:

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

Suppression d'un employé

Pour supprimer un employé, nous allons d'abord trouver l'enregistrement, puis le supprimer. Ici, EntityTransaction joue un rôle important.

La classe nommée DeleteEmployee.java comme suit:

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

Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse.

Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.

use jpadb
select * from employee

La base de données affectée nommée employee aura des enregistrements nuls.

Une fois tous les modules de cet exemple terminés, la hiérarchie des packages et des fichiers s'affiche comme suit: