Datamanager и cache

Обнаружил странное поведение при работе с dataManager и кешем.
image

В этом примере entityManager и dataManager возвращают разные результаты. DataManager null, а entityManager правильный ответ. Если посмотреть логи sql, то видно что они оба берут данные из кеша. Я ожидал получить одинаковые результаты

Пример проекта
cache.zip (105.2 КБ)

Для воспроизведения необходимо перейти на http://localhost:8080/blank-view
Если выключить кеш - проблема решается

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

Спасибо за то, что обнаружили проблему и приложили проект для воспроизведения! Завели ишью чтобы пофиксить ее.

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

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

val user = dataManager.load(User::class.java).id(newUser.id)
        .fetchPlan {
            it.add("testEntity.testEntity1.test.user", FetchPlan.BASE)
        }
        .one()

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

1 симпатия