4.2.4. Наследование сущностей
Рассмотрим пример использования наследования сущностей в приложении CUBA.
Рассмотрим типичный случай, когда у заказа могут быть заказчики разных типов - например, юридические и физические лица, или сущности Company и Individual, у которых есть общие атрибуты. Мы хотим хранить общие атрибуты в общей таблице, а специфичные атрибуты для каждого типа - в отдельных связанных таблицах.
Так, в модели данных мы создадим сущность Client
как базовый класс, который будем хранить в таблице SAMPLE_CLIENT
. Сущности Company
и Person
будут храниться в отдельных таблицах с внешним ключом, ссылающимся на базовую таблицу.
Сущность Order
(заказ) имеет ссылку на сущность Client
. Поскольку заказчики могут быть нескольких типов, при создании нового заказа пользователь должен иметь возможность выбрать нужный тип.
Сущность Client.java:
-
Стратегия наследования:
JOINED
-
Имя столбца дискриминатора
DTYPE
и его тип String оставляем по умолчанию -
Значение дискриминатора:
C
Сущность Company.java:
-
Родительский класс:
Client
-
Значение дискриминатора:
M
Сущность: Person.java:
-
Родительский класс:
Client
-
Значение дискриминатора:
P
Контроллер экрана OrderEdit.java содержит визуальные компоненты и логику для выбора типа заказчика.