Проблема разрыва связей ManyToMany между сущностями

Добрый день!

Столкнулся с проблемой разрыва связей ManyToMany между сущностями.

Описание системы:
jmix 1.4.4
В системе есть сущности: А, Б, В.
Связи между ними:

  • АOneToManyБ
  • АManyToManyБ
  • АManyToManyВ
  • БManyToManyВ

Для каждого класса существуют связанные экраны редактирования. На формах есть возможность открывать связанные элементы, при этом передаётся родительский контекст.

Воспроизведение проблемы:

Пользователь выполняет следующую последовательность действий:

  1. Открывает форму редактирования для А.
  2. На форме А открывает на редактирование сущность Б.
  3. На форме Б связывает сущность В.
  4. Завершает работу с формой — коммит в родительский контекст с сохранением данных.
  5. Открывает формы: АБВ.
  6. На форме В изменяет одно из полей (например, текстовое поле name).
  7. Последовательно закрывает формы с сохранением данных.
  8. Открывает формы АБ — на форме Б в таблице отсутствует ранее добавленная связь с В.

Результат: Изменение В привело к утрате связи с Б.

Анализ проблемы:

При отладке выяснилось, что при открытии формы В не загружается множественная связь, она явно не указана в плане загрузки экрана, но при обработке запроса попадает в FetchGroup поэтому подвергается обработке в стандартном режиме (загрузка и установка значения). Связь теряется при вложенности более 3 экранов, но при просмотре в режиме отладки значение устанавливается.

Примечание: Если открыть экраны БВ напрямую — всё работает корректно, значение связи подтягивается, разрыв не осуществляется.

Аналогичное поведение наблюдается во всей системе при подобном порядке взаимодействия сущностей.

Решение:

Решил проблему явным указанием множественных связей в плане загрузки перед загрузкой данных на экран.

Вопрос:
Сталкивался ли кто-то с подобным поведением? Есть ли рекомендации по работе с такими сценариями?

Здравствуйте, Степан!

Попробовал воспроизвести проблему, но, к сожалению, не удалось это сделать.
Мой тестовый проект:
t2283.zip (96.2 КБ)
сущности A (А), B (Б), C(В).
Связаны между собой, как описано выше.

По воспроизведению не совсем понятны некоторые моменты:

  1. На форме А открывает на редактирование сущность Б

Сущность Б из связи OneToMany или ManyToMany? (пробовал и так, и так, не помогло)

  1. Открывает формы: АБВ.

Форму В открывать для той же самой сущности, которую связали в пункте (3) или для другой? (так же испробованы оба варианта - не воспроизвелось)

Может по-другому нужно объявлять сущности или иначе создавать экраны?

Не могли бы вы на приложенном примере проекта или каком-нибудь другом воспроизвести проблему и уточнить шаги 2 и 5?

С уважением,
Дмитрий