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 в одной транзакции.