Одна сущность ссылается на другую два раза. Проблема сохранения

Добрый день.
У меня в проекте одна сущность ссылается на другую два раза.
Отношения в обоих случаях COMPOSITION.

В одном случае это List, во втором - конкретный экземпляр из листа.

image

Предполагается, что список заполняется стандартными средствами
image

А второе поле заполняется автоматически перед сохранением

image

Есть подозрение, что платформа не может разобраться в каком порядке сохранять сущности.
Если во время создания первой сущности заодно в список добавить вторую, связанную сущность, то при сохранении получаем эксепшн:

image

К уже существующей первой сущности вторая добавляется без проблем.

Прикладываю архив с демо проектом, где можно воспроизвести проблему.

Подскажите, пожалуйста, как попробовать решить данную проблему?


Из того, что я успел попробовать.
Вынес данную логику в afterCommit + вызвал commit.
Получил StackOverFlow exception.
JExample.zip (374.4 КБ)

Добрый день!
А на какой порядок вставки вы здесь рассчитываете? У вас своего рода циклические связи получаются, и какую бы запись вы не вставляли первой, будет нарушение ограничения FK. Тут можно констрейнт FK попробовать удалить, можно заменить ссылку newEntity.latestEntity2 булевой колонкой в NewEntity2, например NewEntity2.isLast. Можно ввести третью линковочную таблицу, которая будет содержать информацию о том, какая NewEntity2 является “последней” для конкретного экземпляра NewEntity.

Да, действительно.
Я упустил данный момент.
Спасибо, что указали.

У меня есть вопрос для понимания платформы.

Я опытным путем обнаружил, что если вынести заполнение newEntity.latestEntity2 в afterCommit то данные сохраняются в БД.

image

В логах вижу

image

Это решает мою проблему, но есть непонимание почему оно работает?
Интуиция подсказывает, что момент сохранения - это сам Commit.
Для меня сюрприз, что изменения сущности после коммита тоже попадают в БД.
Насколько это ожидаемо? (может чего то недоглядели? )

В описании afterCommit указано, что оно нужно для различных уведомлений
image

А точно у вас этот вариант работает? Попробовал сейчас в вашем проекте поменять тип евента, и у меня в этом случае не сохранение происходит по нажатию на кнопку OK, а диалог о несохранённых измнениях выскакивает.

1 симпатия

Да, все верно… я что то не придал значение выпадающему диалогу.
Спасибо.

Буду думать как к этому подойти - возможно поменяю сценарий по которому пользователь заполняет данные.
Сперва попрошу заполнить одну часть данных и сохранить, потом дам доступ к другой части.