Кэш запросов Hibernate автоматически обновляется при внешнем обновлении? - PullRequest
11 голосов
/ 06 мая 2010

Я создаю сервис, который имеет доступ только для чтения к базе данных. У меня есть кеш запросов и кеш второго уровня (режим READ_ONLY) в Hibernate для ускорения работы сервиса, так как доступ к таблицам меняется редко.

У меня вопрос: если кто-то заходит в БД и меняет таблицы вручную (т.е. вне Hibernate), автоматически ли кэш распознает, что его нужно очистить? Есть ли ограничение по времени в кеше?

Ответы [ 2 ]

7 голосов
/ 06 мая 2010

Если вы не используете API Hibernate для внесения изменений, кэш второго уровня не будет получать уведомления и изменения не будут видны. Обычный способ справиться с этой ситуацией заключается в программном извлечении соответствующих объектов из кэша второго уровня для принудительного обновления. SessionFactory предоставляет методы, позволяющие это сделать. Из раздела 19.3. Управление кешами документации:

Для кеша второго уровня есть методы, определенные в SessionFactory для высвобождения кэшированного состояния экземпляр, весь класс, коллекция роль экземпляра или всей коллекции.

sessionFactory.evict(Cat.class, catId); //evict a particular Cat
sessionFactory.evict(Cat.class);  //evict all Cats
sessionFactory.evictCollection("Cat.kittens", catId); //evict a particular 
                                                      //collection of kittens
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections
7 голосов
/ 06 мая 2010

Нет, кеш не будет сканировать базу данных, чтобы вы могли магическим образом обновляться при изменении базовых данных. Изменения, которые не поступают через кэш L2, в нем не отображаются. Время ожидания и т. Д. Зависит от вашего провайдера и настроек по умолчанию. Похоже, что по умолчанию ehcache.xml в течение 2 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...