Hibernate поддерживает три основные стратегии маппинга наследования, которые определяют, как иерархии классов отображаются на таблицы базы данных. Каждая стратегия предлагает разные компромиссы между нормализацией и производительностью запросов.
Эта стратегия использует одну таблицу для представления всей иерархии классов.
BookType) определяет, какой подкласс представляет каждая строкаHardCoverBook и PaperBackBook оба отображаются на таблицу BookПреимущества: минимум таблиц, простые запросы Недостатки: неиспользуемые колонки для каждого подкласса, потенциальные проблемы с целостностью данных
Эта стратегия создаёт отдельные таблицы для каждого конкретного класса, сохраняя при этом родительскую таблицу.
Book) имеет свою таблицуHardCoverBook, PaperBackBook) имеет свою таблицуПреимущества: лучшая нормализация, чистая схема Недостатки: для получения полных данных объекта нужны JOIN-ы
Эта стратегия создаёт независимые таблицы для каждого конкретного класса без родительской таблицы.
HardCoverBook и PaperBackBook содержат все унаследованные колонкиПреимущества: простые запросы без JOIN-ов Недостатки: дублирование данных, сложнее поддерживать консистентность
Выбирай исходя из паттернов запросов, требований к нормализации данных и требований к производительности. Таблица на иерархию классов — самый простой вариант, таблица на подкласс обеспечивает лучшую нормализацию, а таблица на конкретный класс даёт максимальную производительность запросов ценой дублирования данных.
В стратегии table per class hierarchy используется столбец-дискриминатор для определения того, какой подкласс представляет каждая строка, что позволяет хранить все классы иерархии в одной таблице.
Новый — ещё не проверен сообществом
Вы