4.2.2.2. One-to-Many: два уровня вложенности

Композиция может быть более глубокой и состоять из двух уровней вложенности. Усложним приведенный выше пример, добавив сущность MeetingPoint, описывающую место встречи у терминала аэропорта:

composition recipe 2

Теперь сущность 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).

    Warning

    Источник данных meetingPointsDs здесь не связан ни с какими визуальными компонентами, однако он необходим для корректной работы совместного редактирования композиции.

  • terminal-edit.xml - XML-дескриптор экрана редактирования терминала в свою очередь определяет вложенный источник данных и соответствующую таблицу для коллекции meetingPoints.

В результате измененные экземпляры MeetingPoint, так же как и экземпляры Terminal, будут сохраняться в базу данных только вместе с экземпляром Airport в одной транзакции.