Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Обзор Criteria и Metamodel API

Подобно JPQL, Criteria API основан на схеме абстракций персистентных сущностей, их отношений и встроенных объектов. Criteria API работает с этой схемой абстракций, чтобы позволить разработчикам выборку, изменение и удаление персистентных объектов, вызывая операции сущностей Java Persistence API. Metamodel API работает совместно с Criteria API для моделирования персистентных классов сущностей для запросов Criteria.

Criteria API и JPQL тесно связаны и предназначены для обеспечения аналогичных операций в их запросах. Разработчики, знакомые с синтаксисом JPQL, найдут схожие операции уровня объектов в Criteria API.

Следующий простой запрос Criteria возвращает все объекты сущности Pet в базе данных:

EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.select(pet);
TypedQuery<Pet> q = em.createQuery(cq);
List<Pet> allPets = q.getResultList();

Эквивалентный запрос JPQL

SELECT p
FROM Pet p

Этот запрос демонстрирует основные шаги для создания запроса Criteria.

  1. Используйте объект EntityManager для создания объекта CriteriaBuilder.

  2. Создайте объект запроса, создав объект интерфейса CriteriaQuery. Атрибуты этого объекта будут содержать детали запроса.

  3. Установите корень запроса, вызвав метод from объекта CriteriaQuery.

  4. Укажите тип результата запроса, вызвав метод select объекта CriteriaQuery.

  5. Подготовьте запрос к выполнению, создав объект TypedQuery<T> и указав тип результата запроса.

  6. Выполните запрос, вызвав метод getResultList объекта TypedQuery<T>. Поскольку этот запрос возвращает коллекцию сущностей, результат сохраняется в List.

В этой главе подробно обсуждаются все задачи каждого из шагов.

Чтобы создать объект CriteriaBuilder, вызовите метод getCriteriaBuilder объекта EntityManager:

CriteriaBuilder cb = em.getCriteriaBuilder();

Используйте объект CriteriaBuilder для создания объекта запроса:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);

Запрос вернёт объекты сущности Pet. Чтобы создать типобезопасный запрос, укажите тип запроса при создании объекта CriteriaQuery.

Вызовите метод from объекта запроса, чтобы задать условие FROM запроса и указать корень запроса:

Root<Pet> pet = cq.from(Pet.class);

Вызовите метод select объекта запроса, передав его в корень запроса, чтобы задать предложение SELECT запроса:

cq.select(pet);

Теперь используйте объект запроса, чтобы создать объект TypedQuery<T>, который может быть выполнен для источника данных. Изменения объекта запроса фиксируются для создания готового к выполнению запроса:

TypedQuery<Pet> q = em.createQuery(cq);

Выполните этот типизированный объект запроса, вызвав его метод getResultList, поскольку этот запрос будет возвращать несколько объектов сущности. Следующий оператор сохраняет результаты в объекте коллекции List<Pet>:

List<Pet> allPets = q.getResultList();

Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)