Возникли проблемы с получением последовательного возврата из запроса и кеша второго уровня с Hibernate 3.3, ehCache 2.4.7, C3P0 0.9.1.2, MySQL (подтвержденный кеш запросов отключен).
Вставка нового объекта и последующая выборка этого объекта иногда (примерно в 1 из 4) не могут вернуть вставленный объект. Я могу подтвердить, что вставка работает с помощью прямого запроса к базе данных.
Вставленные объекты помечаются как таковые: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
Это запрос findById по первичному ключу (который является строкой, именем пользователя, поскольку это процесс создания нового пользователя), который терпит неудачу.
Когда он завершается успешно и все последующие вызовы, попадания в кеш очищаются, и запросы не запускаются, как ожидалось.
Есть две подозрительные проблемы:
stats.getSecondLevelCacheStatistics
для типа объекта показывает объект в кэше, но записывается промах кэша.- Показано, что запрос запускается после промаха кеша, но он возвращает устаревшие данные (в этом конкретном случае пустой список, поскольку вставка не возвращается)
Я ожидал, что вставка обеспечит попадание в кеш, или, даже если это не сработало, пропущенное попадание в кеш, а затем правильный запрос. Однако неудачная попытка поместить объект в кеш и, как следствие, неудачный запрос - досадная комбинация.