4.2.2.4. Композиция One-to-One

Композиция one-to-one рассматривается на примере сущностей Customer и CustomerDetails:

composition recipe 3
  • Customer.java - сущность Customer содержит необязательную ссылку на CustomerDetails, аннотированную как @Composition.

  • CustomerDetails.java - сущность CustomerDetails.

  • customer-edit.xml - дескриптор экрана редактирования заказчика. Он содержит вложенный источник данных для экземпляра CustomerDetails. Для того, чтобы загрузить вложенный экземляр, корневой источник данных использует представление сущности Customer, включающее атрибут details. Компонент FieldGroup просто декларирует поле для атрибута details.

В результате редактирование экземпляра Customer работает следующим образом:

  • Экран редактирования Customer содержит компонент PickerField с двумя действиями: OpenAction и ClearAction:

composition recipe oto 1
  • Когда вызывается OpenAction, создается новый экземпляр CustomerDetails и он отображается в собственном экране редактирования. При нажатии OK в этом экране, экземпляр CustomerDetails сохраняется не в БД, а в источнике данных detailsDs редактора Customer.

  • Компонент выбора отображает instance name сущности CustomerDetails:

composition recipe oto 2
  • Когда пользователь нажимает OK в редакторе Customer, измененный экземпляр Customer вместе с экземпляром CustomerDetails отправляется в метод DataManager.commit() на средний слой и сохраняется в БД в одной транзакции.

  • Если пользователь вызывает ClearAction в поле выбора, экземпляр CustomerDetails удаляется и ссылка на него очищается в одной транзакции после коммита редактора Customer.