4.2.2.4. Композиция One-to-One
Композиция one-to-one рассматривается на примере сущностей Customer и CustomerDetails:
-
Customer.java - сущность
Customerсодержит необязательную ссылку наCustomerDetails, аннотированную как@Composition. -
CustomerDetails.java - сущность
CustomerDetails. -
customer-edit.xml - дескриптор экрана редактирования заказчика. Он содержит вложенный источник данных для экземпляра
CustomerDetails. Для того, чтобы загрузить вложенный экземпляр, корневой источник данных использует представление сущностиCustomer, включающее атрибутdetails. Компонент FieldGroup просто декларирует поле для атрибутаdetails.
В результате редактирование экземпляра Customer работает следующим образом:
-
Экран редактирования
Customerсодержит компонент PickerField с двумя действиями: OpenAction и ClearAction:
-
Когда вызывается
OpenAction, создается новый экземплярCustomerDetailsи он отображается в собственном экране редактирования. При нажатии OK в этом экране, экземплярCustomerDetailsсохраняется не в БД, а в источнике данныхdetailsDsредактораCustomer. -
Компонент выбора отображает instance name сущности
CustomerDetails:
-
Когда пользователь нажимает OK в редакторе
Customer, измененный экземплярCustomerвместе с экземпляромCustomerDetailsотправляется в методDataManager.commit()на средний слой и сохраняется в БД в одной транзакции. -
Если пользователь вызывает
ClearActionв поле выбора, экземплярCustomerDetailsудаляется и ссылка на него очищается в одной транзакции после коммита редактораCustomer.