4.2.2.3. One-to-Many: три уровня вложенности
Представьте, что вам необходима еще одна сущность, содержащая некоторые детали места встречи (MeetingPoint). Назовем эту сущность Note. Таким образом, вся структура будет выглядеть следующим образом: Airport > Terminal > Meeting Point > Note.
 
 
  CUBA может обеспечить работу с композициями с максимум двумя уровнями вложенности. Теперь у нас структура с тремя уровнями, поэтому необходимо ограничить глубину композиции либо сверху, либо снизу. В данном разделе мы рассмотрим два различных (с точки зрения user experience) подхода для исключения из композиции аэропорта. Оба подхода решают одну и ту же проблему: так как теперь терминалы сохраняются в базу данных независимо от аэропорта, невозможно сохранить терминал для только что созданного аэропорта, пока он не сохранен в БД.
-  При первом подходе браузер и редактор аэропорта выглядят так же, как и раньше, но редактор имеет дополнительную кнопку Save для сохранения нового аэропорта не закрывая экрана. Пользователь не может создавать терминалы, пока новый аэропорт не сохранен. -  airport-edit.xml содержит standalone источник данных для терминалов вместо вложенного. Этот источник связан с источником аэропорта, и поэтому загружает терминалы только для редактируемого аэропорта. Кроме того, экран содержит фрейм extendedEditWindowActions, позволяющий пользователю сохранить аэропорт не закрывая экран.
-  AirportEdit.java - здесь, в методе postInit()редактора аэропорта, мы управляем состоянием enabled действия создания терминала и передаем текущий экземпляр аэропорта для инициализации ссылки в создаваемом терминале.
 
-  
-  При втором подходе мы разбиваем браузер аэропортов на две панели: одна для списка аэропортов, вторая для зависимого списка терминалов. Т.е. список терминалов теперь находится вне редактора аэропорта. Действие создания терминалов недоступно, если не выбран ни один аэропорт. -  airport-browse.xml содержит standalone источник данных для списка терминалов. Он связан с источником аэропортов, и загружает терминалы только для выбранного аэропорта. 
-  AirportBrowse.java - здесь, в методе init()браузера аэропорта, мы управляем состоянием enabled действия создания терминала и передаем выбранный экземпляр аэропорта для инициализации ссылки в создаваемом терминале.
 
-