иерархия

Наследование в Hibernate

Есть несколько вариантов организации иерархии при работе с Hibernate ORM. На данный момент выделяют три подхода:

  • One table per concrete class - для каждого наследника создается отдельная таблица со всеми полями, включая пронаследованные.
  • One table per class hierarchy - создаем одну "родительскую" таблицу, каждая строка которой должна содержать все поля родительского класса, плюс поля всех наследников, т.е. потенциально кучу null значений.
  • One table per subclass - мэппим базовый класс и наследников на отдельные таблицы и создаем иерархию с помощью внешних ключей.

Остановимся на 3м варианте - One table per subclass, наиболее удачном на мой взгляд, т.к. в базе данных не будет никакой избыточности полей, как в первом варианте, и не будет проблемы масштабирования, как в варианте 2.