Что даёт объявление интерфейса, наследующего JpaRepository?
- Зачем наследовать JpaRepository?
Реализацию генерирует Spring Data: CRUD (save, findById, delete), пагинация и сортировка, и запросы, выведенные из имён методов (findByEmail).
- Свой запрос — @Query
- Не нужно писать DAO-класс
- Под капотом — EntityManager и Hibernate
А ещё Опечатка в имени метода видна при старте
Подробно
Имя метода разбирается по правилам, и findByEmailAndStatus превращается в соответствующий запрос без единой строки кода. Когда правил не хватает, запрос задают явно через @Query. Полезно знать границу удобства: чем сложнее условие, тем длиннее и хуже читается имя метода — начиная с некоторого момента честнее написать запрос явно. Схему таблиц Spring Data не создаёт: этим занимается генерация схемы Hibernate или, что правильнее для боевых систем, инструмент миграций.
Что хотят услышать
- Что генерируется.
- Запросы по имени метода и @Query.
Частые ошибки
- Строить метод с именем из десятка условий вместо явного запроса.
- Полагаться на автоматическую генерацию схемы в production.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Spring Data создаёт реализацию сам, а findByEmail превращает в запрос по имени
- ✗Нужно самостоятельно написать класс-реализацию этого интерфейса и пометить её @Repository
- ✗Создаётся таблица в базе данных по описанию интерфейса
- ✗Все методы автоматически становятся транзакционными на запись
Что спросят дальше
- Когда стоит перейти от имени метода к @Query?
- Почему миграции схемы делают отдельным инструментом?
Разбор темы
- Spring Data JPA: репозитории и Hibernate
Абстракция репозитория, derived queries и @Query, persistence context и dirty checking, lazy/N+1 и почему DTO, а не entity.
Связанные вопросы
- Что даёт Spring Data JPA? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.