Critérios predefinidos é uma API que é usado para definir consultas a entidades. Trata-se de um forma alternativa de definir a JPQL consulta. Essas consultas são do tipo-cofre, portáteis e fáceis de modificar, alterar a sintaxe. Semelhante a JPQL, segue um esquema abstrato (fácil de editar esquema) e objetos incorporados. A API de metadados é misturada com criteria API para modelo entidade persistente aos critérios pedidos.
A grande vantagem da Criteria API é que erros podem ser detectadas mais precocemente durante o tempo de compilação. Seqüência de consultas JPQL e baseado em critérios JPA consultas baseadas são as mesmas em termos de desempenho e eficiência.
O critério é incluído em todas as versões do JPA, pois, cada passo dos critérios é notificado no caderno da JPA.
Os critérios e a JPQL estão intimamente ligados e são permitidos para o projeto usando os operadores semelhantes em suas consultas. Ele segue javax.microedition.media persistência.critérios pacote para projetar uma consulta. A estrutura de consulta significa a sintaxe critérios consulta.
O seguintes critérios simples consulta retorna todas as instâncias da classe de entidades, a fonte de dados.
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();
A consulta mostra os passos básicos para criar um critério.
Instância EntityManager é usado para criar um CriteriaBuilder objeto.
CriteriaQuery exemplo é usado para criar um objeto de consulta. Esta consulta do objeto atributos será modificado com os detalhes da consulta.
CriteriaQuery.método form é chamado a definir a raiz da consulta.
CriteriaQuery.selecione é chamado a definir a lista de resultados.
TypedQuery<T>exemplo é usado para preparar uma consulta para execução e especificando o tipo do resultado da consulta.
O método getResultList TypedQuery<T> objeto para executar uma consulta. Esta consulta retorna uma coleção de entidades, o resultado é armazenado em uma lista.
Vamos considerar o exemplo do banco de dados de funcionários. Consideremos o jpadb.trabalhador tabela contém os seguintes 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
Criar uma JPA projeto no IDE eclipse chamado JPA_Eclipselink_Criteria. Todos os módulos do presente projeto são discutidas a seguir:
Criar um pacote chamadocom.howcodex.eclipselink.entitysob‘src’ pacote.
Criar uma classe chamada Employee.java sob determinado pacote. A classe empregado entidade é mostrado como se segue:
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 + "]"; } }
Arquivo persistence.xml é a 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.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 contém as classes de serviço, que implementa os critérios consulta peça usando a API de metadados a inicialização. Criar um pacote chamado‘com.howcodex.eclipselink.service’. A classe chamada CriteriaAPI.java é criada em cada pacote. A DAO aula é mostrado como se segue:
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)o; 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)o; System.out.println("EID : "+e.getEid() +" Ename : "+e.getEname()); } entitymanager.close( ); emfactory.close( ); } }
Após compilar e executar o programa que você irá obter o seguinte resultado no painel do console do 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