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() и сохраняется в базе данных в рамках одной транзакции.