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

Отображение в структуру БД иерархии наследования Java с совмещением нескольких стратегий одновременно

Классы сущностей Java могут иметь иерархическую структуру и существует ряд стратегий отображения этой структуры в БД. В частности используются подходы «отдельная таблица на каждый конкретный класс» и «одна таблица для всех наследников». У каждого из подходов есть свои преимущества и недостатки. Hibernate позволяет использовать эти две стратегии одновременно.

Например, если у нас есть класс Person и у него три наследника: Client, Employee и Freelancer, мы можем хранить данные двух наследников (Client и Employee) в одной таблице, а данные Freelancer в отдельной таблице, у которой будет внешний ключ на id общей таблицы.

Читать далее

Отображение в структуру БД иерархии наследования Java в одну таблицу для всех наследников.

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

То есть, если классы Client и Employee наследуют класс Person, то Hibernate создаёт одну таблицу PERSON, в которой хранит данные, отображённые как из объектов класса Client, так и из Employee.

Такая таблица получается не нормализованной и вынуждена допускать то или иной количество nullable полей, что имеет свои недостатки и может быть неприемлемым. Однако у этого похода есть свои преимущества. В одной таблице хранятся данные о различных объектах предметной области, что позволяет делать выборку разных объектов по общим полям. Это, вероятно, самый быстрый способ создавать полиморфные списки объектов типа List<Person>, делая выборку из БД.

Читать далее