2010-05-27 5 views
2

내 응용 프로그램에 외부 적으로 업데이트되는 데이터베이스와 함께 eclipselink JPA를 사용하고 있습니다. 이러한 이유로 몇 초마다 쿼리 할 테이블이 있습니다. 캐시 및 쿼리 캐시를 사용하지 않도록 설정하려고해도이 기능을 사용할 수 없습니다. 예를 들어 용량 변경 내 응용 프로그램 println 메소드를 자고있는 동안 비록 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()); 

는 항상 하나, 둘에 대해 동일한 값을 출력합니다.

나는 내가 모르는 뭔가가되어야하지만, 아이디어가 부족하고있는 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을 통해 읽고있는 것입니다.

찾기 새로 고침 속성 "eclipselink.refresh"를 찾기 호출 (JPA 2.0)에 추가하거나 초기 찾기 후에 간단히 em.refresh를 호출하십시오. 나는 그것이 캐시 문제를 해결하기를 희망

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

......... 문제를 해결 언급 내 경우