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.
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.
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.
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 un paquete denominado com.howcodex.eclipselink.entity en "src'
Crear una clase denominada Empleado.java en paquete. La clase entidad empleado se muestra de la siguiente manera:
package com.howcodex.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 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.howcodex.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>
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.howcodex.eclipselink.service’. La clase denominada CriteriaAPI.java se crea en paquete. La clase DAO se muestra de la siguiente manera:
package com.howcodex.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.howcodex.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