спящий отключающий кеш - PullRequest
3 голосов
/ 26 июля 2011

Я хочу отключить спящий режим кэширования.

session.setCacheMode(CacheMode.IGNORE) не работает.
query.setCacheable(false) также не работает.

Кроме того, могу ли я каким-то образом настроить, что кэширование не будет выполняться для объектов X, Y, но будет выполняться для объекта Z?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 04 декабря 2012

Вы можете позвонить session.clear() непосредственно перед получением повторно используемого объекта сеанса от менеджера.

т.е. В нашем проекте мы должны были синхронизировать обновления между многими сессиями гибернации (по одному на http-сессию). Кэш 2-го уровня работает нормально, но 1-й уровень (за сеанс) пришлось отключить или очистить. Таким образом, мы создали SessionManager , который хранит все сеансы и доставляет их по запросу. Непосредственно перед доставкой session.clear(), и это решает проблему.

Пока вы не выполняете свою единицу работы - кэш 1-го уровня в порядке.

3 голосов
/ 26 июля 2011

попробуйте что-то подобное при настройке фабрики сеансов гибернации:

configuration.setProperty( Environment.USE_QUERY_CACHE, Boolean.FALSE.toString() );
configuration.setProperty( Environment.USE_SECOND_LEVEL_CACHE, Boolean.FALSE.toString() );
configuration.setProperty(Environment.CACHE_REGION_FACTORY,org.hibernate.cache.impl.NoCachingRegionFactory.class.getName());
configuration.setProperty(Environment.CACHE_PROVIDER,org.hibernate.cache.NoCacheProvider.class.getName());

Однако обратите внимание, что вы не можете отключить Session Cache, предоставляемый Hibernate (если не все реализации JPA). Если вы действительно что-то не кэшируете в Hibernate, вы можете либо удалить его, либо не использовать Hibernate (в зависимости от того, что проще для вас)

Что касается кэширования конкретных сущностей, я рекомендую вам взглянуть на javax.persistence.Cacheable и посмотреть, как это работает для вас.

1 голос
/ 28 июля 2011

Я искал в Интернете и пришел к выводу, что кеш сессии действительно нельзя отключить. Это очень странно. Мое решение для себя - использовать session.clear (), когда я хочу очистить кеш.

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