Как добавить коллекцию данных в сущность и таблицу при создании сущности

Добрый день!
Есть три сущности: ServiceOrder, ServiceOrderItem, WorkProcess.
ServiceOrder связана c ServiceOrderItem как OneToMany - ServiceOrder содержить коллекцию ServiceOrderItem. ServiceOrderItem содержит ссылку на WorkProcess.

Есть два экрана ServiceOrderBrowse и ServiceOrderEdit.

ServiceOrderEdit открывается из ServiceOrderBrowse через фасет следующим образом:

    serviceOrderEditorScreen.setEditMode(EditMode.CREATE);
    serviceOrderEditorScreen.show().init(facility, tariffingShiftType);

facility, tariffingShiftType - это сущности, которые используются для выборки из WorkProcess

При открытии экрана на создание нужно сделать выборку из WorkProcess, создать коллекцию ServiceOrderItem и добавить ее ServiceOrder. Так же добавить ее в таблицу для того, чтобы пользователь мог отредактировать другие поля сущеностей ServiceOrderItem.

Генерация:

    List<WorkProcess> workProcesses = serviceOrderService.getWorkProcessListByFacilityAndShiftType(facility, tariffingShiftType);
    List<ServiceOrderItem> serviceOrderItems = new ArrayList<>();

    for (WorkProcess workProcess : workProcesses            ) {
        ServiceOrderItem serviceOrderItem = new ServiceOrderItem();
        serviceOrderItem.setServiceOrder(this.getEditedEntity());
        serviceOrderItem.setWorkProcess(workProcess);

        serviceOrderItems.add(serviceOrderItem);
    }

В таблицу пытаюсь добавить так:

@Inject
CollectionPropertyContainer serviceOrderItemsDc;

serviceOrderItemsDc.setItems(serviceOrderItems);

Но строки не добавляются.

В ServiceOrder добавляю
this.getEditedEntity().setServiceOrderItems(serviceOrderItems);

При попытке сохранения появляется ошибка.
IllegalStateException: An attempt to save an entity with reference to some not persisted entity. All newly created entities must be saved in the same transaction. Put all these objects to the CommitContext before commit.

Подскажите, пожалуйста, как правильно сгенерировать и добавить коллекцию сущностей в основную сущность экрана и в таблицу?

Заранее спасибо!

Добавляете в принципе правильно, вопрос в том - в уровне какого события вашего экрана ServiceOrderEdit вы это делаете?
Как объявлен контейнер serviceOrderItemsDc? Это вложенный контейнер внутри InstanceContainer или самостоятельный?
Экран у вас отрывается для создания новой сущности. Значит на событии
InitEntityEvent экран инициализирует InstanceContainer для сущности ServiceOrder, и одновременно инициализируются все вложенные в него контейнеры.

Не зная того, как объявлены контейнеры и на уровне какого события жизненного цикла экрана вы пытаетесь добавлять serviceOrderItems - можно только предположения выдвигать.

Если корректно добавить сущности в serviceOrderItemsDc, то this.getEditedEntity().setServiceOrderItems(serviceOrderItems) уже лишнее.

А вот ServiceOrderItem создаете не правильно. Об этом вам говорит и сообщение об ошибке: “…Put all these objects to the CommitContext before commit”.
На экране проще всего создавать экземпляры сущности через DataContext:

ServiceOrderItem serviceOrderItem = dataContext.create(ServiceOrderItem.class);

И получите экземпляр ServiceOrderItem, состояние которого отслеживается в контексте экрана.
Можно создать через MetaData, но с дополнительными движениями для добавления сущности в контекст экрана, без чего она у вас не закомитится штатно:

ServiceOrderItem serviceOrderItem = metaData.create(ServiceOrderItem.class);
dataContest.merge(serviceOrderItem);

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

1 симпатия

Большое спасибо за ответ!
Помогло
ServiceOrderItem serviceOrderItem = new ServiceOrderItem();
заменить на
ServiceOrderItem serviceOrderItem = dataContext.create(ServiceOrderItem.class);
Документацию почитаю обязательно, еще раз спасибо!