Для чего использовали JPA и какая реализация была
Что проверяют
Понимаете ли вы, что JPA это спецификация, а работаете вы с конкретной реализацией, и знаете ли, что происходит под аннотациями. Следом почти наверняка спросят про N+1, ленивую загрузку и LazyInitializationException.
Как отвечать
Каркас из трёх частей.
Что такое JPA. Сейчас это Jakarta Persistence: с версии 3.0 пакет называется jakarta.persistence, а не javax.persistence, и Spring Boot 3 работает только с новым пространством имён. Реализации: Hibernate ORM (по умолчанию в Spring Boot), EclipseLink (исторически эталонная), реже OpenJPA. Поверх обычно Spring Data JPA с репозиториями и производными запросами.
Для чего использовали. Назовите реальные задачи: маппинг сущностей, CRUD, связи между таблицами, транзакции через @Transactional. И покажите, что понимаете механику:
- контекст персистентности: сущности в нём отслеживаются, и изменения попадают в базу при
flushбез явногоsave(dirty checking); - загрузка связей:
@ManyToOneи@OneToOneпо умолчаниюEAGER, коллекцииLAZY. Обычно всё переводят наLAZYи подгружают нужное черезJOIN FETCHили@EntityGraph; - N+1: как вы его находили, по логам SQL или счётчику запросов в тестах;
- схема: миграции через Flyway или Liquibase, а не
ddl-auto=updateна проде.
Почему Hibernate. Честный ответ часто звучит как «он шёл по умолчанию со Spring Boot», и это нормально. Сильнее будет, если назовёте, чем пользовались сверх спецификации: кеш второго уровня, @BatchSize, статистика Hibernate, или где уходили в нативный SQL и jOOQ.
Где спотыкаются
Называют Criteria API особой возможностью Hibernate. Criteria API входит в саму спецификацию JPA начиная с версии 2.0.
Не знают, что spring.jpa.open-in-view в Spring Boot включён по умолчанию. Ленивые связи тогда молча грузятся при сериализации ответа, соединение с базой держится весь запрос, а N+1 уезжает в прод незамеченным.
Пишут equals и hashCode сущности по всем полям или по генерируемому id, не учитывая, что до сохранения он равен null. Объект, положенный в HashSet до persist, потом не находится.