Вопрос с собеседования · Spring

Что даёт объявление интерфейса, наследующего JpaRepository?

JuniorSpring Data JPA и HibernateSpring Data
Ещё спрашивают так:
  • Зачем наследовать JpaRepository?
Коротко

Реализацию генерирует Spring Data: CRUD (save, findById, delete), пагинация и сортировка, и запросы, выведенные из имён методов (findByEmail).

  • Свой запрос — @Query
  • Не нужно писать DAO-класс
  • Под капотом — EntityManager и Hibernate

А ещё Опечатка в имени метода видна при старте

Подробно

Имя метода разбирается по правилам, и findByEmailAndStatus превращается в соответствующий запрос без единой строки кода. Когда правил не хватает, запрос задают явно через @Query. Полезно знать границу удобства: чем сложнее условие, тем длиннее и хуже читается имя метода — начиная с некоторого момента честнее написать запрос явно. Схему таблиц Spring Data не создаёт: этим занимается генерация схемы Hibernate или, что правильнее для боевых систем, инструмент миграций.

Что хотят услышать

  • Что генерируется.
  • Запросы по имени метода и @Query.

Частые ошибки

  • Строить метод с именем из десятка условий вместо явного запроса.
  • Полагаться на автоматическую генерацию схемы в production.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Spring Data создаёт реализацию сам, а findByEmail превращает в запрос по имени
  • ✗Нужно самостоятельно написать класс-реализацию этого интерфейса и пометить её @Repository
  • ✗Создаётся таблица в базе данных по описанию интерфейса
  • ✗Все методы автоматически становятся транзакционными на запись

Что спросят дальше

  • Когда стоит перейти от имени метода к @Query?
  • Почему миграции схемы делают отдельным инструментом?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования