Я использую EXTENDED Постоянный контекст, потому что это позволит мне лениво загрузить отношение «один-много» для объекта, а также не потребует SELECT, прежде чем я «сливаю» объект с постоянный контекст.
У меня есть объект DummyObject с:
Поле даты «Последнее обновление»
Отношение один-много
Этот объект обновляется каждые 5 секунд в одной JVM через em.merge(DummyObject)
вызов.
В другой JVM я запрашиваю, чтобы DummyObject выполнял вызов, подобный следующему
em.createQuery("from DummyObject").getResultList();
Я также делаю этот запрос каждые 5 секунд.
Проблема заключается в том, что все объекты, полученные в результате запроса, имеют метку времени самого первого запроса после последовательных вызовов, даже если Hibernate генерирует правильный оператор SQL (когда я выполняю вход оператора), а база данных получать обновления правильно (я подтвердил).
Я также попробовал все виды оптимистической блокировки с @Version безрезультатно. (См. Комментарии)
Другое дело, что это работает правильно, когда:
Я изменяю PersistentContextType
на Транзакции (то, что
не позволит мне лениво загрузить
ОДНО-МНОЖЕСТВО отношений)
Я делаю вызов EntityManager.clear ()
прежде чем я сделаю запрос выше
(То, что тоже не позволит
мне лениво загрузить ОДНОМНОГО
отношения).
Почему мой запрос возвращает устаревшие данные? У меня нет Кэширование второго уровня или кеширование запросов включено.
Я что-то не так делаю? Есть ли что-то, что я могу установить с помощью query.setHint (,)?
Может быть, я не понимаю " EXTENDED " против TRANSACTIONAL правильно.