Архив метки: @jakarta.persistence.MappedSuperclass

Отображение в БД иерархии наследования встраиваемых @Embeddable классов в Hibernate

Если классы-значения, встраиваемые в классы-сущности, организованы в виде иерархии, то при их отображении в БД необходимо учитывать разветвлённость этой иерархии. Если иерархия никак не ветвится, то есть у каждого предка в цепочке наследования есть только один потомок, то ничего особого предпринимать не нужно, достаточно делать стандартную разметку аннотацией @Embeddable.

Если у какого-то из встраиваемых классов-предков более одного потомка, то есть иерархия наследования начинает ветвиться, то может понадобиться более тонкая разметка классов аннотациями.

Читать далее

Отображение в структуру БД иерархии наследования Java без учёта полиморфизма с помощью Hibernate

Классы сущностей Java могут иметь иерархическую структуру и существует ряд стратегий отображения этой структуры в БД. Самой простой стратегией является отображение каждого конечного конкретного класса в отдельную таблицу с полным игнорированием полиморфных отношений.

То есть если классы Client и Employee наследуют класс Person, то Hibernate создаёт для каждого отдельную таблицу и при этом тот факт, что оба класса наследуют Person для Hibernate не будет иметь значения. Hibernate не будет способен искать объекты типа Person, составлять и возвращать из БД списки типа Person, в которых были бы смешаны данные из двух таблиц. Он будет работать с CLIENT и EMPLOYEE только как с абсолютно не связанными таблицами.

Читать далее