Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: criteria, api, jpa

Для чего применяется Criteria API?

Вопрос проверяет понимание динамических запросов в JPA и умение работать с типобезопасными API вместо строкового SQL.

Короткий ответ

Criteria API используется для построения динамических запросов к базе данных. Запросы собираются программно, а не строками. Это снижает риск ошибок в именах полей и упрощает рефакторинг. Criteria API особенно полезен, когда условия запроса заранее неизвестны. Однако код получается более многословным, чем JPQL.

Длинный ответ

Criteria API решает задачу построения сложных и динамических запросов в JPA, когда невозможно заранее написать фиксированный JPQL.

Определение

Criteria API — это типобезопасный программный API для построения запросов JPA, в котором запрос формируется через Java-объекты и методы, а не через строки.

Зачем нужен Criteria API

1) Динамические условия

Часто фильтры зависят от пользовательского ввода или набора параметров.

  1. Типичный сценарий

    • пользователь указал часть фильтров

    • остальные фильтры отсутствуют

    • запрос нужно собрать на лету

  2. Преимущество

    • нет сложной конкатенации строк

    • проще добавлять или убирать условия

2) Типобезопасность

Criteria API работает с метамоделью сущностей.

  1. Что это даёт

    • ошибки в именах полей ловятся на этапе компиляции

    • рефакторинг не ломает запросы

  2. Контраст с JPQL

    • JPQL — строки

    • ошибки видны только в рантайме

3) Интеграция со Spring Data

Criteria API часто используется через Specification.

  1. Это позволяет

    • комбинировать условия

    • переиспользовать части запросов

    • писать чистый и расширяемый код

Пример идеи использования

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);

List<Predicate> predicates = new ArrayList<>();

// условия добавляются динамически
predicates.add(cb.equal(root.get("status"), "ACTIVE"));

query.where(predicates.toArray(new Predicate[0]));

Недостатки Criteria API

  1. Код более многословный

  2. Сложнее читать, чем JPQL

  3. Не всегда оправдан для простых запросов

Краткий вывод

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#criteria

#api

#jpa

Подпишись на Java Developer в телеграм