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
.