4.2.2.1. One-to-Many: один уровень вложенности
Рассмотрим реализацию композиции на примере сущностей Airport
и Terminal
:
-
Terminal.java - сущность
Terminal
содержит обязательную ссылку наAirport
.В редакторе сущностей Studio установите следующие свойства для атрибута
airport
: Attribute type - ASSOCIATION, Cardinality - MANY_TO_ONE, Mandatory - on. -
Airport.java - сущность
Airport
содержит one-to-many коллекцию терминалов. Соответствующее поле аннотировано @Composition для реализации композиции, и @OnDelete для каскадного мягкого удаления.В редакторе сущностей Studio установите следующие свойства для атрибута
terminals
: Attribute type - COMPOSITION, Cardinality - ONE_TO_MANY, On delete - CASCADE. -
views.xml - представление
airport-terminals
экрана редактирования аэропорта содержит атрибут-коллекциюterminals
. Для этого атрибута используется представление_local
, так как атрибутairport
сущностиTerminal
устанавливается только во время создания экземпляраTerminal
и никогда не изменяется после этого, поэтому загружать его не требуется. -
airport-edit.xml - XML-дескриптор экрана редактирования аэропорта определяет источник данных для экземпляра аэропорта, и вложенный источник для его терминалов. Кроме того, экран содержит таблицу, отображающую терминалы.
-
terminal-edit.xml - стандартный редактор для сущности
Terminal
.
В результате редактирование экземпляра аэропорта работает следующим образом:
-
В экране редактирования аэропорта отображается таблица терминалов.
-
Пользователь может выбрать терминал и открыть экран его редактирования. При нажатии OK в экране редактирования терминала измененный экземпляр терминала сохраняется не в базу данных, а в источник данных
terminalsDs
экрана редактирования аэропорта. -
Пользователь может создавать новые или удалять терминалы - все изменения сохраняются в источнике данных
terminalsDs
. -
Пользователь нажимает OK в экране редактирования аэропорта, и измененный
Airport
вместе со всеми измененными экземплярамиTerminal
отправляется на middleware в метод DataManager.commit() и сохраняется в базе данных в рамках одной транзакции.