Для чего используется библиотека Spring Data
Что проверяют
Понимаете ли вы, что даёт библиотека помимо готовых методов, и не считаете ли её заменой знанию SQL.
Как отвечать
Spring Data убирает шаблонный код доступа к данным. Вы объявляете интерфейс репозитория, а реализацию генерирует сам фреймворк.
Что она даёт:
- готовые операции: сохранение, поиск по идентификатору, удаление, подсчёт из
CrudRepositoryиJpaRepository; - запросы по имени метода:
findByCompanyAndSalaryGreaterThanразбирается в запрос без единой строки SQL; @Queryдля сложных случаев, на JPQL или нативном SQL;- пагинация и сортировка через
PageableиSortс готовым объектомPage, который сразу знает общее число записей; - проекции: интерфейс или запись с нужными полями вместо целой сущности, чтобы не тянуть лишнее;
- спецификации и Querydsl для динамических фильтров, которые нельзя выразить именем метода;
- аудит: автоматическое заполнение полей создания и изменения через
@CreatedDateи родственные аннотации; - единый подход к разным хранилищам: JPA, JDBC, MongoDB, Redis, Elasticsearch. Модуль разный, стиль работы один.
Обязательно назовите границы применимости, иначе ответ выглядит рекламным: сложные отчётные запросы пишут руками или берут JdbcTemplate; ленивые связи и проблема N+1 никуда не деваются и лечатся @EntityGraph или join fetch; Page делает дополнительный подсчётный запрос, и на больших таблицах он дорог, поэтому иногда берут Slice или пагинацию по ключу.
Где спотыкаются
Считают, что библиотека избавляет от знания SQL. На собеседовании это выясняется первым же вопросом про план запроса.
Собирают методы с именами в десять слов вместо того, чтобы написать @Query.
Возвращают наружу сущности JPA прямо из контроллера и получают ленивую загрузку вне транзакции вместе с непредсказуемым JSON.