JPA - API Criterios


Anuncios


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.formse llama al m茅todo set la consulta.

  • CriteriaQuery.selectest谩 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 鈥榗om.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(鈥淪elect 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)o;
         System.out.println("EID : "+e.getEid()
         +" Ename : "+e.getEname());
      }

      //Ordering the records 
      System.out.println(鈥淪elect 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