2010-05-27 2 views
2

Я использую eclipselink JPA с базой данных, которая также обновляется внешне для моего приложения. По этой причине есть таблицы, которые я хочу запросить каждые несколько секунд. Я не могу заставить это работать, даже когда я пытаюсь отключить кеш и кеш запросов. Например:Отключить кэширование eclipselink и кеширование запросов - не работает?

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default"); 
EntityManager em = entityManagerFactory.createEntityManager(); 

MyLocation one = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); 

Thread.sleep(10000); 

MyLocation two = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); 

System.out.println(one.getCapacity() + " - " + two.getCapacity()); 

Даже если изменения мощности в то время как мое приложение спит на Println всегда печатает то же значение для одного и двух.

Я добавил следующее в persistence.xml

<property name="eclipselink.cache.shared.default" value="false"/> 
<property name="eclipselink.query-results-cache" value="false"/> 

Я должен что-то отсутствует, но я бегу из идей.

Джеймс

+0

В моем случае 2 свойства вы упомянули решаемые проблемы. Тем не менее, я использовал запрос EntityManager. – Jarekczek

ответ

3

Этот вопрос вы читаете через PersistenceContext/EM, который поддерживает объектную транзакционной представление данных и никогда не будет обновляться, если обновляется.

Добавьте запрос refresh property "eclipselink.refresh" в запрос на поиск (JPA 2.0) или просто вызовите em.refresh после первоначальной находки.

0
@Entity 
@Cache(shared=false) 
public class Employee { 
    ... 
} 

Я надеюсь, что это решит вашу проблему кэша .........

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