Отключение кеша EclipseLink - PullRequest
       11

Отключение кеша EclipseLink

5 голосов
/ 03 декабря 2011

В моем приложении, когда пользователь входит в систему, система считывает некоторые настройки из БД и сохраняет их в сеансе пользователя. Система выполняет это действие по запросу JPA, используя EclipseLink (JPA 2.0).

Когда я изменяю некоторые настройки в БД и снова захожу, запрос возвращает предыдущие результаты. Похоже, что EclipseLink кеширует результаты.

Я использовал это, чтобы исправить это поведение, но это не работает :

query.setHint(QueryHints.cache_usage,cacheUsage.no_cache);

Ответы [ 2 ]

7 голосов
/ 05 декабря 2011

Если вы хотите установить подсказки к запросу, docs рекомендует выполнить:

query.setHint("javax.persistence.cache.storeMode", "REFRESH");

Вы можете поочередно установить аннотацию @Cacheable затронутой сущности

@Cacheable(false)
public class EntityThatMustNotBeCached {
...
}
3 голосов
/ 04 декабря 2011

Если вы возвращаете какой-либо объект конфигурации и хотите быть уверены, что данные не устарели, вы можете вызвать em.refresh(yourEntity) после возврата объекта из запроса. Это заставит JPA-провайдера получать свежие данные из базы данных, несмотря на кэширование.

Если вы хотите отключить кэш L2, вы можете использовать <shared-cache-mode>NONE</shared-cache-mode> в <persistence-unit> в persistence.xml или использовать Cacheable(false) непосредственно в вашей конфигурации.

Если вы возвращаете простые поля вместо сущностей и по-прежнему получаете устаревшие данные, вы можете попробовать очистить PersistenceContext, вызвав em.clear().

...