··Query setParameter(Parameter
··Query setParameter(Parameter
··// Извлекает параметры посредством запроса
··Set
··Parameter > getParameter(String name);
··Parameter > getParameter(int position);
··
··
··boolean isBound(Parameter > param);
··
··Object getParameterValue(String name);
··Object getParameterValue(int position);
··// Ограничивает количество результатов, возвращаемых запросом
··Query setMaxResults(int maxResult);
··int getMaxResults();
··Query setFirstResult(int startPosition);
··int getFirstResult();
··// Задает и извлекает подсказки в запросах
··Query setHint(String hintName, Object value);
··Map
··// Задает тип режима сброса для использования при выполнении запроса
··Query setFlushMode(FlushModeType flushMode);
··FlushModeType getFlushMode();
··// Задает тип режима блокировки для использования при выполнении запроса
··Query setLockMode(LockModeType lockMode);
··LockModeType getLockMode();
··// Разрешает доступ к API, специфичному для поставщика
··
}
Методы, которые главным образом используются в этом API, обеспечивают выполнение запроса как такового. Чтобы выполнить запрос SELECT, вам придется сделать выбор между двумя методами в зависимости от требуемого результата.
• Метод getResultList() выполняет запрос и возвращает список результатов (сущностей, атрибутов, выражений и т. д.).
• Метод getSingleResult() выполняет запрос и возвращает одиночный результат (генерирует исключение NonUniqueResultException при обнаружении нескольких результатов).
Для осуществления операции обновления или удаления метод executeUpdate() выполняет массовый запрос и возвращает несколько сущностей, затронутых при выполнении запроса.
Как вы уже видели в разделе «JPQL» ранее, при запросе могут использоваться параметры, которые являются либо именованными (например, myParam), либо позиционными (например,?1). API Query определяет несколько методов setParameter для задания параметров перед выполнением запроса.
Когда вы выполняете запрос, он может возвратить большое количество результатов. В зависимости от приложения они могут быть обработаны все вместе либо порциями (например, веб-приложение выводит только десять строк за один раз). Для управления разбиением на страницы интерфейс Query определяет методы setFirstResult() и setMaxResults(), позволяющие указывать соответственно первый получаемый результат (с нумерацией, начинающейся с нуля) и максимальное количество результатов для возврата относительно этой точки.
Режим сброса является для поставщика постоянства индикатором того, как следует поступать с ожидаемыми изменениями и запросами. Есть две возможные настройки режима сброса: AUTO и COMMIT. AUTO (используемая по умолчанию) означает, что поставщик постоянства обеспечивает, что ожидаемые изменения будут видимыми при обработке запроса. COMMIT используется, когда эффект от обновления сущностей не перекрывается измененными данными в контексте постоянства.
Запросы можно блокировать с помощью метода setLockMode(LockModeType).
В последующих разделах демонстрируется пять разных типов запросов с использованием описанных здесь методов.
Динамические запросы
Динамические запросы генерируются на лету по мере того, как это требуется приложению. Для создания динамического запроса используйте метод EntityManager.createQuery(), принимающий в качестве параметра строку, которая представляет JPQL-запрос.