StackOverflowError при ленивой загрузке

В своем проекте столкнулся с ошибкой StackOverflowError при ленивой загрузке.
Проблема воспроизводится в специфической ситуации, когда кэшируемая сущность загружается через entityManager, а после делается запрос через dataManager, который загружает в том числе эту сущность. В таком случае изначальная сущность меняет статус с managed на detached и при загрузке ленивых коллекций происходит StackOverflowError.
Я создал тестовый проект который воспроизводит эту проблему. Для воспроизведения нужно запустить тест Test1.

stackOverflow.zip (131,8 КБ)

@Transactional
public void method(UUID entityOne) {
EntityOne managed = entityManager.find(EntityOne.class, entityOne);
EntityTwo entityTwo1 = managed.getEntityThreeTest().getEntityTwo();
List list = dataManager.load(EntityOne.class).all().list();
entityTwo1.getEntityThrees().size();
}

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

К тому же managed сущность после dataManager.load(EntityOne.class).all().list(); становится detached, что тоже неожиданно и тоже может вызывать проблемы.

Воспроизводится на JMIX 2.8.1

Спасибо за сообщение о проблеме и тестовый проект.
Завел тикет: StackOverflowError with cached entity and subsequent loads through EntityManager and DataManager · Issue #5254 · jmix-framework/jmix · GitHub

С уважением,
Константин

Ошибка появилась именно в 2.8.1 - в 2.8.0 её нет. Я проверил это на своём проекте с тестами, где условия достаточно изолированы.

В 2.8.0 всё работает корректно. В 2.8.1 при включённом кешировании сущности возникает StackOverflowError. Если отключить кеширование, StackOverflowError пропадает, но вместо него начинают появляться многочисленные unfetched ошибки для embeddable-полей. Причём эти ошибки выглядят плавающими и возникают нестабильно.

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

В тестовом примере воспроизвести unfetched ошибку мне не удалось.

Мне кажется, что эта задача приоритетнее, чем ее оценили

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

Артем, здравствуйте!

Как временное решение, чтобы вернуть поведение, которое было в 2.8.0, можно проставить в application.properties:

jmix.eclipselink.wrap-excessively-loaded-properties=false

Проверил на приложенном проекте, StackOverflowError уходит.

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