2016-10-26 14 views
0

У меня есть объект с именованным запросом.eclipselink query-results-cache не работает

@Entity(name = "MyEntity") 
@Table(name = "mytable") 
//@ReadOnly 
@NamedQueries({ 
@NamedQuery(
     name = "exampleFind", 
     query = "[..]", 
hints = {@QueryHint(name= QueryHints.QUERY_RESULTS_CACHE, value= "TRUE")}) 
}) 
@Cacheable 
@Cache(type = CacheType.FULL) 
public class MyEntity { 

Когда я аннотирование этого класса @ReadOnly то этот запрос не попали в базу данных (используется кэш результатов только), но когда я удалить @ReadOnly аннотации всегда выполняет SQL в базе данных.

Как включить этот кеш без @ReadOnly? Существуют ли ограничения на кеш результатов?

Я использую EclipseLink 2.4.1

ответ

0

В нашем приложении мы были некоторые проблемы с получением кэша запросов на работу, а также. Вы должны убедиться, что ваши объекты и ваши результаты запроса кэшируются.

Для нас это работает, когда мы устанавливаем совместно-кэш-режим в persistence.xml к DISABLE_SELECTIVE:

<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode> 

Вместе с этим мы используем @Cache настроить тип кэширования мы хотим для наших организаций. И @Cacheable(false), чтобы отключить его для некоторых.

В соответствии с developers manual этот параметр по умолчанию является значением по умолчанию, поэтому также следует удалить текущие настройки.

+0

Спасибо. К сожалению, это не помогает. Есть ли возможность регистрировать/контролировать кеши в eclipselink, чтобы проверить, включен ли кеш или когда обновлен? Возможно, этот кеш недействителен каждый раз, и именно по этой причине всегда есть запрос SQL к базе данных. – Mario

+0

Вы можете запросить отдельные объекты, если они кэшированы в общем кэше. , Это можно сделать с помощью IdentityMapAccessor: https://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching. Есть еще много измерений производительности, но я еще не пробовал их. Также вы можете настроить ведение журнала для eclipselink на самые тонкие детали в вашем persistence.xml – Thirler