Критерии предопределенный API который использован для того чтобы определить вопросы для реальностей. Альтернативный путь определять вопрос JPQL. Эти вопросы тип-безопасны, портативны, и легки для того чтобы доработать путем изменять синтаксис. Подобно к JPQL, он следовать абстрактной схимой (легкой для того чтобы редактировать схиму) и врезанными предметами. Метаданные API mingled с критериями API для моделирования упорней реальности для вопросов критериев.
Главное преимущество критериев API что ошибки можно обнаружить более раньше во время времени трансляции. Строк-основанные вопросы JPQL и критеря по JPA основали вопросы такие же в представлении и эффективности.
Критерии включенны в все версии JPA поэтому каждый шаг критериев сообщен в спецификациях JPA.
Критерии и 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> для того чтобы исполнить вопрос. Этот вопрос возвращает собрание реальностей, результат хранится в списке.
Препятствуйте нам рассматривать пример базы данных работника. Допустим, таблица 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 следующим образом:
<?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