Современная книга POJO в действии рассказывает об этом
Если приложение с одним сервером обновляет базу данных, используя постоянную среду, она обновляет кэш уровня процесса.
* * 1006 И ...
Кэшируемые объекты, которые могут быть обновлены, обычно должны использовать оптимистическую блокировку, поскольку это предотвратит слепое перезапись изменений в базе данных приложением. И если транзакция обновляет кэшированный объект, который уже был изменен в базе данных, сбой оптимистической блокировки вызовет откат транзакции. Инфраструктура постоянства удалит устаревшие данные из кэша, и приложение может повторить транзакцию с последней версией данных.
И выберите одну из следующих стратегий в соответствии с JPA с книгой Hibernate
- Транзакционный: доступен только в управляемой среде, гарантирует полный
транзакционная изоляция до повторяемого чтения, если требуется. Используйте эту стратегию для
в основном для чтения данных, где важно предотвратить устаревшие данные в параллельных транзакциях,
в редком случае обновления.
- Чтение-запись: эта стратегия поддерживает изолированную фиксацию чтения с использованием отметки времени.
механизм и доступен только в некластерных средах. Опять же, используйте эту стратегию для данных, предназначенных главным образом для чтения, когда крайне важно предотвратить устаревшие данные в параллельных транзакциях в редком случае обновления.
Добавлено к оригинальному ответу: Hibernate НЕ ГАРАНТИРУЕТ согласованность между кешем и базой данных, используете ли вы @Cache (use = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE). Если вы хотите его использовать, вы ДОЛЖНЫ настроить достаточно короткий срок действия, который может повлиять на производительность.
С уважением,