есть 2 сущности типа Order и OrderLine. Order в себе содержит @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) List<OrderLine> orderLines. Есть код, который из csv грузит такой order и его линии, загрузка реализована напрямую через jdbcTemplate (для скорости), и после такой загрузки для объекта Order вызывается entityManager.refresh (чтобы вытянуть в него все актуальные данные после загрузки). Проблема в том, что при загрузке некоторые линии могут добавляться, а некоторые - обновляться, и после entityManager.refresh в orderLines нет изменений, которые были сделаны напрямую через jdbc. Если после entityManager.refresh для order-а дернуть в цикле entityManager.refresh для каждой orderLine из коллекции, то тогда требуемые изменения уже вытягиваются. Я не могу понять - это где-то баг (у меня в коде или в ORM фреймворке) или я неправильно понимаю механизм работы entityManager.refresh? Я думал, что refresh на родительской сущности (на order) за счет наличия cascade = CascadeType.ALL на поле коллекции применит рефреш и к самой коллекции -> в коллекции будет актуальная инфа. Или рефреш в этом случае для коллекции просто актуализирует список объектов в коллекции, используя кэш первого уровня для тех объектов, что были в коллекции, и выгружая из БД новые записи?.. Мб кто-нибудь сталкивался с таким или хорошо разбирается в том, как работает REFRESH?
O2M ленивый
а откуда берётся коллекция в родительской сущности? она persistent?
Обсуждают сегодня