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