2013-11-19 4 views
0

Я добавил новое булево поле (myFlag) в существующий класс (MyClass).Конфигурация кэша отдельных классов Eclipselink

На стороне JSP я добавил следующий код (myClassObject был передан как атрибут запроса).

<span onclick="toggleMyFlag()"> 
    <c:choose> 
     <c:when test="${myClassObject.myFlag}"> 
      <c:out value="TRUE" /> 
     </c:when> 
     <c:otherwise> 
      <c:out value="FALSE" /> 
     </c:otherwise> 
    </c:choose> 
</span> 

Когда span нажата, то флаг на предприятии успешно переключен (я могу просмотреть изменения в базе данных, и т.д.).

Однако, когда страница перезагружает выходы TRUE или FALSE, они не обновлены правильно (они остаются неизменными). Обновление страницы не работает. Выход из системы и обратно - нет. И закрытие браузера не делает. Единственный способ, по-видимому, исправить себя, - это перезапустить локальный сервер.

Я пробовал следующее без везения.

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
response.setHeader("Pragma", "no-cache"); 
response.setDateHeader("Expires", 0); 

Я также пробовал следующее по моему запросу, снова без везения.

query.setHint(QueryHints.REFRESH, HintValues.TRUE); 

Тогда я обнаружил, что если я изменил следующее свойство (в persistence.xml) ложными, функциональность работала.

<property name="eclipselink.cache.shared.default" value="true"/> 

Однако я не хочу отключать все кэширование.

Я ничего не знаю о EclipseLink, поэтому мне было интересно, можно ли отключить кеширование всего лишь MyClass.

ответ

0

У меня нет кода рекомендовать который из следующего будет работать для вас точно, но вот три опции, которые вы можете попробовать в зависимости от ваших потребностей/код:

em.createNamedQuery("MyLocation.findMyLoc").setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache).getResultList().get(0); 

@Entity 
@Cache(isolation=ISOLATED) 
public class Employee { 
    ... 
} 

Or the JPA 2.0 @Cacheable annotation: 

@Entity 
@Cacheable(false) 
public class Employee { 
    ... 
} 

source 1, source 2

+0

'@Cache (false)' и '@Cache (isol = ISOLATED)' оба не компилируются. Похоже, мы используем EclipseLink 2.1.3. Запрос подсказки печально не сработал. –

+0

Я просто попробовал '@Cache (alwaysRefresh = true)' (который скомпилировал) без везения. –

+0

Что такое NameQuery с "CacheUsage.DoNotCheckCache"? Вы тоже это попробовали? –

Смежные вопросы