В своем проекте столкнулся с ошибкой 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