JPA - Критерии API


Advertisements

Критерии предопределенный API который использован для того чтобы определить вопросы для реальностей. Альтернативный путь определять вопрос JPQL. Эти вопросы тип-безопасны, портативны, и легки для того чтобы доработать путем изменять синтаксис. Подобно к JPQL, он следовать абстрактной схимой (легкой для того чтобы редактировать схиму) и врезанными предметами. Метаданные API mingled с критериями API для моделирования упорней реальности для вопросов критериев.

Главное преимущество критериев API что ошибки можно обнаружить более раньше во время времени трансляции. Строк-основанные вопросы JPQL и критеря по JPA основали вопросы такие же в представлении и эффективности.

История критериев API

Критерии включенны в все версии JPA поэтому каждый шаг критериев сообщен в спецификациях JPA.

  • В JPA 2,0, превращены критерии запрашивают API, шаблонизацию вопросов.
  • В JPA 2,1, критерии уточняют и удаление (навальные новая версия и удаление) включенно.

Структура вопроса критериев

Критерии и JPQL близко отнесены и позволены конструировать используя подобные операторов в их вопросах. Она следовать пакетом javax.persistence.criteria для того чтобы конструировать вопрос. Структура вопроса значит вопрос критери по синтаксиса.

Следующий простой вопрос критериев возвращает все примеры типа реальности в источнике данных.

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

Вопрос демонстрирует основные шаги для того чтобы создать критерии.

  • Пример EntityManager использован для того чтобы создать предмет CriteriaBuilder.

  • Пример CriteriaQuery использован для того чтобы создать предмет вопроса. Атрибуты этого предмета вопроса будут доработаны с деталями вопроса.

  • Метод CriteriaQuery.form вызван для того чтобы установить корень вопроса.

  • CriteriaQuery.select вызвано для того чтобы установить тип списка результата.

  • Пример TypedQuery<T> использован для того чтобы подготовить вопрос для исполнения и определять тип результата вопроса.

  • метод getResultList на предмете TypedQuery<T> для того чтобы исполнить вопрос. Этот вопрос возвращает собрание реальностей, результат хранится в списке.

Пример критериев API

Препятствуйте нам рассматривать пример базы данных работника. Допустим, таблица jpadb.employee содержит следовать показатели:

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

Создайте проект JPA в названном затмении IDE JPA_Eclipselink_Criteria. Все модули этого проекта обсужены ниже:

Создавать реальности

Создайте пакет, названный com.howcodex.eclipselink.entity под ‘src’

Создайте класс, названный Employee.java под данным пакетом. Предприятие Сотрудника класса показывают следующим образом:

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

Архив Persistence.xml следующим образом:

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

Обслуживайте типы

Этот модуль содержит типы обслуживания, который снабжает часть вопроса критериев используя начинание API метаданных. Создайте названный пакет ` com.howcodex.eclipselink.service'. Названный тип CriteriaAPI.java создан под, котор дали пакетом. Тип DAO показан что следующим образом:

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

После составлять и исполнять вышеуказанную программу вы получите следующий выход в панели пульта затмения 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