Отключить кэширование eclipselink и кеширование запросов - не работает? - PullRequest
2 голосов
/ 27 мая 2010

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

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"/>

Я, должно быть, что-то упускаю, но у меня заканчиваются идеи.

Джеймс

Ответы [ 2 ]

3 голосов
/ 27 мая 2010

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

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

0 голосов
/ 22 ноября 2010
@Entity
@Cache(shared=false)
public class Employee {
    ...
}

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

...