Я использовал наследование с Hibernate (а некоторые с Django) и очень сожалел об этом.
Принцип «композиция поверх наследования» особенно актуален для классов доменов. Хотя я согласен, что в нескольких случаях наследование имеет смысл на уровне модели, в большинстве случаев наследование даст вам очень статичную модель предметной области, в которой один объект не сможет перейти в другой класс.
Я также считаю, что большинству разработчиков не нравится концепция наследования на уровне базы данных, поэтому обслуживание становится более сложным.
И, наконец, есть некоторые технические проблемы, такие как прокси, созданные Hibernate, которые скрывают класс actall объекта. Это заставляет "экземпляр" вести себя странно. Конечно, вы можете сказать, что «instance of» - это запах кода и, возможно, это еще один намек на то, что композиция, вероятно, является лучшим решением ...