4.2.2.2. One-to-Many: два уровня вложенности
Композиция может быть более глубокой и состоять из двух уровней вложенности. Усложним приведенный выше пример, добавив сущность MeetingPoint
, описывающую место встречи у терминала аэропорта:
Теперь сущность Terminal
содержит атрибут meetingPoints
- коллекцию экземпляров MeetingPoint
. Для того, чтобы все три сущности представляли собой единую композицию и редактировались совместно, нужно в дополнение к описанному в предыдущем разделе выполнить следующее:
-
Terminal.java - атрибут
meetingPoints
классаTerminal
содержит аннотации@Composition
и@OnDelete
аналогично атрибутуterminals
классаAirport
. -
views.xml - представление
terminal-meetingPoints-view
сущностиTerminal
содержит атрибут-коллекциюmeetingPoints
. Данное представление используется в представленииairport-terminals-meetingPoints-view
сущностиAirport
. -
airport-edit.xml - дескриптор экрана редактирования
Airport
содержит источники данных для экземпляраAirport
и вложенных сущностей на всю глубину композиции (airportDs
>terminalsDs
>meetingPointsDs
).Источник данных
meetingPointsDs
здесь не связан ни с какими визуальными компонентами, однако он необходим для корректной работы совместного редактирования композиции. -
terminal-edit.xml - XML-дескриптор экрана редактирования терминала в свою очередь определяет вложенный источник данных и соответствующую таблицу для коллекции
meetingPoints
.
В результате измененные эземпляры MeetingPoint
, так же как и экземпляры Terminal
, будут сохраняться в базу данных только вместе с экземпляром Airport
в одной транзакции.