JPQL
JPQL обращается к Entity, а не напрямую к таблицам
JPQL похож на SQL, но запрос формулируется в терминах persistence-модели. Вместо имени таблицы используется имя Entity, а вместо столбцов — её persistent-поля или свойства.
List<User> users = entityManager.createQuery(
"select u from User u where u.active = :active",
User.class)
.setParameter("active", true)
.getResultList();
Здесь User — Entity, u.active — её атрибут,
а результат сразу имеет тип List<User>.
Provider преобразует JPQL в запрос к конкретной базе данных.
Параметры передаются отдельно от текста запроса
Как и с PreparedStatement, значения не нужно склеивать со строкой запроса.
Именованный параметр :active делает запрос понятнее и отделяет структуру запроса от данных.
Связи можно использовать прямо в выражениях
List<Order> orders = entityManager.createQuery(
"select o from Order o where o.user.id = :userId",
Order.class)
.setParameter("userId", 42L)
.getResultList();
JPQL умеет навигироваться по отображённым отношениям Entity. Но удобный объектный синтаксис не отменяет стоимости итогового SQL, поэтому сложные запросы всё равно нужно оценивать с точки зрения базы данных.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти