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-у.


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