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

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

Создание строковых запросов

Чтобы создать строковый запрос, укажите имена атрибутов классов сущностей непосредственно в виде строк вместо указания атрибутов класса метамодели. Например, этот запрос находит все объекты сущности Pet, у которых значение атрибута name равно Fido:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(cb.equal(pet.get("name"), "Fido"));

Имя атрибута указывается в виде строки. Этот запрос соответствует следующему запросу метамодели:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(cb.equal(pet.get(Pet_.name), "Fido"));

Примечание:

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

Объединения указываются так же:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = pet.join("owners").join("addresses");

Все условные выражения, выражения методов, методы навигации по путям и методы фильтрации результатов, используемые в запросах метамодели, также могут использоваться в строковых запросах. В каждом случае атрибуты указываются с использованием строк. Например, вот строковый запрос, который использует выражение in:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(pet.get("color").in("brown", "black"));

Вот строковый запрос, который упорядочивает результаты в порядке убывания даты:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.select(pet);
cq.orderBy(cb.desc(pet.get("birthday")));

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