Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Java Persistence API предоставляет следующие методы для выборки объектов сущностей.
Язык запросов персистентности Java (Java Persistence query language — JPQL) — это язык на основе строк, похожий на SQL, который используется для выборки объектов сущностей и их отношений. См. главу 42 «Язык запросов персистентности Java» для получения дополнительной информации.
Criteria API используется для создания типобезопасных (typesafe) запросов с использованием API Java для выборки объектов сущностей и их отношений. См. главу 43 «Использование Criteria API для создания запросов» для получения дополнительной информации.
Как JPQL, так и Criteria API имеют свои преимущества и недостатки.
JPQL-запросы длиной всего несколько строк обычно более лаконичны и более читабельны, чем запросы Criteria. Разработчикам, знакомым с SQL, будет легко понять синтаксис JPQL. Именованные запросы JPQL могут быть определены в классе сущности с помощью аннотации Java или в дескрипторе развёртывания приложения. Однако запросы JPQL не являются типобезопасными (typesafe) и требуют преобразования при получении результата запроса от entity manager-а. Это означает, что ошибки приведения типов не могут быть обнаружены во время компиляции. JPQL-запросы не поддерживают открытые (open-ended) параметры.
Запросы Criteria позволяют определить запрос в слое бизнес-логики приложения. Хотя это также возможно при использовании динамических запросов JPQL, запросы Criteria обеспечивают более высокую производительность, поскольку динамические запросы JPQL должны анализироваться при каждом вызове. Запросы Criteria являются типобезопасными и поэтому не требуют приведения, как это необходимо делать с запросами JPQL. Criteria API — это ещё один API Java, и он не требует от разработчиков изучения ещё одного синтаксиса языка запросов. Запросы Criteria, как правило, более подробны, чем запросы JPQL, и требуют от разработчика создания нескольких объектов и выполнения операций над этими объектами перед отправкой запроса entity manager-у.
Назад | Вперёд | Содержание |