JPA - API Criterios



Criterios predefinidos es una API que se utiliza para definir las consultas a las entidades. Es una forma alternativa de definir un JPQL consulta. Estas consultas son del tipo de seguro, portátil y fácil de modificar cambiando la sintaxis. Similar a JPQL., sigue un esquema abstracto (fácil de editar esquema) y objetos incrustados. La API de metadatos se mezcla con criterios de API modelo entidad persistente criterios para las consultas.

La principal ventaja de los Criterios API es que los errores se pueden detectar antes durante el tiempo de compilación. Basado en la cadena JPA consultas y JPQL criterios consultas basadas en rendimiento y eficiencia.

Historia del API criteria

Los criterios se incluye en todas las versiones de JPA. por lo tanto, cada paso de los criterios es notificado de las especificaciones de JPA.

  • En JPA 2.0 , los criterios API de consulta, la normalización de las consultas se han desarrollado.
  • En JPA 2.1 , actualización Criterios y eliminar (actualización masiva y eliminar) están incluidos.

Criterios Estructura de consulta

Los criterios y el JPQL están estrechamente relacionados y se les permite diseñar utilizando los operadores similares en las consultas. El siguiente paquete javax.persistence.criterios para el diseño de una consulta. La estructura de consulta significa la sintaxis criterios consulta.

Los siguientes criterios simples consulta devuelve todas las instancias de la clase de entidad en el origen de datos.

EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Entity class> cq = cb.createQuery(Entity.class);
Root<Entity> from = cq.from(Entity.class);
cq.select(Entity);
TypedQuery<Entity> q = em.createQuery(cq);
List<Entity> allitems = q.getResultList();

La consulta muestra los pasos básicos para crear un conjunto de criterios.

  • EntityManager ejemplo se utiliza para crear un objeto CriteriaBuilder.

  • CriteriaQuery ejemplo se utiliza para crear un objeto de la consulta. Esta consulta atributos del objeto será modificado con los detalles de la consulta.

  • CriteriaQuery.form se llama al método set la consulta.

  • CriteriaQuery.select está llamado a establecer el resultado tipo de lista.

  • TypedQuery<T> se utiliza para preparar una consulta para la ejecución y especificando el tipo de resultado de la consulta.

  • getResultList method on the TypedQuery<T> para ejecutar una consulta. Esta consulta devuelve una colección de entidades, el resultado se almacena en una lista.

Ejemplo de API criterios.

Consideremos el ejemplo de base de datos de empleados. Supongamos que el jpadb.tabla de empleados contiene los siguientes registros:

Eid   Ename          Salary   Deg
401   Gopal          40000    Technical Manager
402   Manisha        40000    Proof reader
403   Masthanvali    35000    Technical Writer
404   Satish         30000    Technical writer
405   Krishna        30000    Technical Writer
406   Kiran          35000    Proof reader

Crear un proyecto de JPA en el eclipse que IDE llamado JPA_Eclipselink_Criteria. Todos los módulos de este proyecto se describen a continuación:

Crear entidades

Crear un paquete denominado com.tutorialspoint.eclipselink.entity en "src'

Crear una clase denominada Empleado.java en paquete. La clase entidad empleado se muestra 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;

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

Persistence.xml

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

Clases de servicio

Este módulo contiene las clases de servicio, que implementa los Criterios parte de la consulta mediante la API de metadatos inicialización. Crear un paquete denominado ‘com.tutorialspoint.eclipselink.service’. La clase denominada CriteriaAPI.java se crea en paquete. La clase DAO se muestra de la siguiente manera:

package com.tutorialspoint.eclipselink.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import com.tutorialspoint.eclipselink.entity.Employee;

public class CriteriaApi 
{
   public static void main(String[] args) 
   {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      
      CriteriaBuilder criteriaBuilder = entitymanager.getCriteriaBuilder();
      CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
      
      Root<Employee> from = criteriaQuery.from(Employee.class);

      //select all records
      System.out.println(“Select all records”);
      CriteriaQuery<Object> select =criteriaQuery.select(from);
      TypedQuery<Object> typedQuery = entitymanager.createQuery(select);
      List<Object> resultlist= typedQuery.getResultList();

      for(Object o:resultlist)
      {
         Employee e = (Employee);
         System.out.println("EID : " + e.getEid() + " Ename : " + e.getEname());
      }

      //Ordering the records 
      System.out.println(“Select all records by follow ordering”);
      CriteriaQuery<Object> select1 = criteriaQuery.select(from);
      select1.orderBy(criteriaBuilder.asc(from.get("ename")));
      TypedQuery<Object> typedQuery1 = entitymanager.createQuery(select);
      List<Object> resultlist1= typedQuery1.getResultList();

      for(Object o:resultlist1)
      {
         Employee e = (Employee);
         System.out.println("EID : " + e.getEid() + " Ename : " + e.getEname());
      }

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

Después de compilar y ejecutar el programa anterior, obtendrá el siguiente mensaje de salida en el panel de la consola de Eclipse IDE.

Select All records
EID : 401 Ename : Gopal
EID : 402 Ename : Manisha
EID : 403 Ename : Masthanvali
EID : 404 Ename : Satish
EID : 405 Ename : Krishna
EID : 406 Ename : Kiran
Select All records by follow Ordering
EID : 401 Ename : Gopal
EID : 406 Ename : Kiran
EID : 405 Ename : Krishna
EID : 402 Ename : Manisha
EID : 403 Ename : Masthanvali
EID : 404 Ename : Satish
Advertisements