Маппинг Hibernate

Маппинг отвечает на вопрос: как объектная модель представлена таблицами, столбцами, ключами и связями.

Карта раздела

Проверка хорошего маппинга

  1. Владеющая сторона связи определена явно.
  2. equals и hashCode не зависят от ленивых коллекций и изменяемых полей.
  3. Каскады отражают жизненный цикл агрегата, а не используются «на всякий случай».
  4. Fetch-план выбирается для конкретного сценария.
  5. Ограничения Java-модели согласованы с NOT NULL, UNIQUE и внешними ключами БД.
  6. Миграции схемы остаются источником истины для production.

Вопросы для повторения

  1. Кто владеет двунаправленной связью? Сторона, на которой задан внешний ключ; в JPA обратная сторона указывает mappedBy.
  2. Аннотации достаточно для целостности? Нет, критичные ограничения должны существовать и в БД.
  3. Почему нельзя сделать все связи EAGER? Это создаёт тяжёлые графы, лишние join и непредсказуемую стоимость.
  4. Что важнее — удобная модель или схема? Нужен осознанный компромисс: ORM не отменяет ограничения реляционной модели.