Когда вы используете Hibernate, вы на самом деле используете два кэша.Первый - это кеш сессии.Допустим, вы запрашиваете 2000 записей, обновляете и сохраняете изменения до 5, а затем снова запускаете тот же запрос (все в рамках одного сеанса).Hibernate на самом деле не будет выполнять запрос второй раз - он знает, что у вас есть 2000 записей (и 5 изменений), уже загруженных в память.Этот кеш включается автоматически - его нельзя отключить, так как он является частью основных функций Hibernate.Вам нужно закрыть (или хотя бы сбросить) сеанс, чтобы убедиться, что изменения применены - вы просто не хотите открывать один гигантский сеанс и продолжать что-то менять, или в итоге у вас закончится память.
Кэш второго уровня в основном помещает хранилище значений ключей между вашим приложением и базой данных.Этот кэш, как правило, более долговечен, и его могут использовать несколько сеансов, но он также более сложный (например, необходимо правильно обрабатывать потоки, аннулирование и т. Д.).Самая большая проблема заключается в том, что если ваши данные сильно меняются, вам действительно нужно вносить изменения как в кэш второго уровня, так и в базу данных, что может быть медленнее, чем просто вносить изменения напрямую.Однако кэш второго уровня отлично подходит для данных только для чтения.
Настройка Hibernate, и кеши могут быть довольно сложными и сложными.Я настоятельно рекомендую использовать такой инструмент, как p6spy, чтобы увидеть трафик базы данных между вашим приложением и базой данных.