4.2.4. Наследование сущностей

Рассмотрим пример использования наследования сущностей в приложении CUBA.

Рассмотрим типичный случай, когда у заказа могут быть заказчики разных типов - например, юридические и физические лица, или сущности Company и Individual, у которых есть общие атрибуты. Мы хотим хранить общие атрибуты в общей таблице, а специфичные атрибуты для каждого типа - в отдельных связанных таблицах.

Так, в модели данных мы создадим сущность Client как базовый класс, который будем хранить в таблице SAMPLE_CLIENT. Сущности Company и Person будут храниться в отдельных таблицах с внешним ключом, ссылающимся на базовую таблицу.

Сущность Order (заказ) имеет ссылку на сущность Client. Поскольку заказчики могут быть нескольких типов, при создании нового заказа пользователь должен иметь возможность выбрать нужный тип.

inheritance

Сущность Client.java:

  • Стратегия наследования: JOINED

  • Имя столбца дискриминатора DTYPE и его тип String оставляем по умолчанию

  • Значение дискриминатора: C

Сущность Company.java:

  • Родительский класс: Client

  • Значение дискриминатора: M

Сущность: Person.java:

  • Родительский класс: Client

  • Значение дискриминатора: P

Контроллер экрана OrderEdit.java содержит визуальные компоненты и логику для выбора типа заказчика.