Вопрос проверяет знание способов формирования запросов в Spring Data JPA и умение выбирать подходящий вариант под задачу.
В Spring Data JPA запросы можно писать разными способами: через имена методов, с помощью JPQL, native SQL и Criteria API. Также используются Specification для динамических условий. Самый простой способ — генерация запросов по имени метода. Более сложные запросы обычно пишутся явно. Выбор подхода зависит от сложности логики и требований к гибкости.
Spring Data JPA предоставляет несколько уровней абстракции для работы с запросами — от максимально простых до полностью контролируемых.
Запрос в Spring Data JPA — это способ описать, какие данные и по каким условиям должны быть получены из базы данных через репозиторий.
Spring Data умеет анализировать имя метода и автоматически строить запрос.
Пример идеи
List<User> findByStatusAndAgeGreaterThan(String status, int age);
Плюсы
минимум кода
читаемо для простых условий
Минусы
длинные имена методов
плохо подходит для сложной логики
@Query)JPQL — объектно-ориентированный язык запросов.
Особенности
работает с сущностями, а не таблицами
не зависит от конкретной СУБД
Пример идеи
@Query("select u from User u where u.status = :status")
List<User> findActiveUsers(String status);
Позволяет писать «чистый» SQL.
Когда нужен
сложные JOIN
специфичные функции СУБД
оптимизация производительности
Пример идеи
@Query(value = "select * from users where status = ?", nativeQuery = true)
List<User> findByStatus(String status);
Используется для программной сборки запросов.
Особенности
динамические условия
типобезопасность
Часто применяется
через Specification
Обёртка над Criteria API для композиции условий.
Преимущество
переиспользуемые фильтры
чистая архитектура
Spring Data JPA позволяет выбирать способ написания запросов под конкретную задачу: от простых методов до сложных динамических запросов и native SQL.