Кэш 2-го уровня Hibernate не фиксирует обновления базы данных, которые происходят с базовыми объектами с помощью представлений, собственных запросов и т. Д. Я бы сказал, что вас это укусило, и вам нужно явно аннулировать кэш, когда Вы знаете, что прервали его, или вам нужно его отключить.
Другая возможность состоит в том, что вы работаете в режиме SERIALIZABLE изоляции транзакции с подключением, на котором открыта старая транзакция. Скажем, ваше приложение получает соединение из пула соединений или другой части вашего приложения, и у этого соединения уже есть открытая транзакция до того, как вы написали данные, которые сейчас пытаетесь прочитать. Если это так, вы увидите старый снимок. Это не должно происходить , но приложения с ошибками могут возвращать соединения с открытыми транзакциями в пул, и для пула может не быть настроено автоматическое закрытие и сброс их, или вы не используете правильный пул соединений.
Из этих двух я бы сказал, что проблемы с кэшированием в Hibernate являются наиболее вероятным виновником.