Как ставилась задача по формированию структуры таблиц и маппингу объектов в Spring Data JPA
Что проверяют
Как вы работаете с задачей от постановки до кода: кто приносил требования, кто решал про схему, как выбирали маппинг. По ответу видно, проектировали ли вы таблицы сами или писали сущности под готовую схему. Следом обычно спрашивают про LAZY и EAGER, проблему N+1 и миграции.
Как отвечать
Каркас на своём проекте:
- постановка: откуда пришла задача (тикет с описанием предметной области, ТЗ от аналитика, макеты) и что в ней не было описано, например кардинальность связей или правила удаления;
- схема: как выделили сущности и связи, насколько нормализовали, какие выбрали ключи (
IDENTITY, последовательность, UUID), где добавили уникальные ограничения и индексы; - маппинг:
@ManyToOne(fetch = FetchType.LAZY)на стороне владельца связи,@OneToMany(mappedBy = ...)на обратной,@Enumerated(EnumType.STRING),@Embeddableдля объектов-значений,@Versionдля оптимистичной блокировки; - миграции: схема живёт в Flyway или Liquibase, а
spring.jpa.hibernate.ddl-autoстоит вvalidateилиnone. Hibernate сверяет сущности со схемой, но не создаёт её; - проверка: интеграционные тесты на Testcontainers с настоящей базой, логирование SQL, чтобы поймать N+1 до прода.
Нужны свои примеры и цифры: сколько таблиц, какой объём данных, какой запрос тормозил и как вы это нашли. Если схему проектировал тимлид или DBA, так и скажите, а затем покажите, какие решения по маппингу принимали сами и почему. Честное «таблицы уже были, я делал сущности и репозитории» лучше выдуманной истории, которая развалится на первом уточнении.
Где спотыкаются
Рассказывают, что схему создаёт Hibernate через ddl-auto=update. Для прода это тревожный сигнал: нет контроля над изменениями, нет отката, нет истории.
Не знают, что у @ManyToOne по умолчанию EAGER. Список из ста заказов тянет пользователей отдельными запросами, и это классический N+1. Лечится LAZY плюс JOIN FETCH или @EntityGraph там, где связь реально нужна.
Отвечают теорией нормализации без единой детали своего проекта. Вопрос поведенческий: интервьюер ждёт вашу историю и ваши решения, а не пересказ учебника.