2017-09-13 25 views
1

내 데이터베이스에서 일부 결과를 얻으려면 @NamedQuery을 사용하고 있습니다. 잠시 동안 조작 한 후에는 더 많은 성능을 위해 캐시에 응용 프로그램이 배치 된 후 &이 캐시에 저장되면 @NamedQuery이 요청되었음을 이해했습니다.@NamedQuery 캐시 가능 결과 대체

그래서 요청이있을 때 항상 데이터베이스에서 정보를 얻는 방법 (일종의 쿼리)을 찾고있어 항상 업데이트 된 데이터를 얻을 수 있습니까? 그런 일을 할 수있는 방법이 있다면 그 성과는 무엇입니까?

+0

명명 된 쿼리를 한 번 컴파일 (SQL로). JPA 공급자 별 쿼리 결과 캐싱을 설정하지 않은 경우 항상 실행되어야합니다. 하지만 – DN1

+0

@ DN1을 사용 설정 한 것을 정의하지 않은 경우 어디에서 그런 구성을 찾을 수 있습니까? 왜냐하면 나는 어떤 구성도하지 않았기 때문입니다! –

+1

EMF를 정의 했으므로 "일부"구성을 수행했습니다. LOG가있어서 어떤 SQL이 호출되는지 볼 수 있습니다. – DN1

답변

1

이미 주석에 요약되어 있듯이 NamedQuery에 대한 오해가 있습니다. 결과는 캐시에 저장되지 않지만 쿼리 SQL은 캐시에 저장됩니다. 당신은 당신을 쿼리 객체 (예를 들어 EntityManager.createNamedQuery ("nameOfYourQuery"))과는 EclipseLink로 작업하는 경우

....

그럼에도 불구하고 때때로의 EntityManager는 몇 가지 캐시 나는 당신이에 대한 솔루션을 필요로 추측

@NamedQuery(name = "something", query = "SELECT n FROM something", 
[email protected](name=QueryHints.REFRESH, value=HintValues.TRUE)) 

또 다른 방법 위스콘신 :

Query query = EntityManager.createNamedQuery("nameOfYourQuery"); 
query.setHint(QueryHints.REFRESH, HintValues.TRUE); 
query.getResultList(); 

또한 설정 쿼리가이 같은 NamedQuery에 직접 힌트 수 있습니다 : 다음과 같은 작업을 수행 할 수 가능한 쿼리 힌트의 목록

query.setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache); 

, the EclipseLink docs를 보라 : 번째 쿼리 힌트는이 하나가 될 것입니다.

당신은 완전히 당신은 또한 당신의 persistence.xml에서 다음을 시도 할 수 있습니다 캐시 데이터베이스 결과를 비활성화하려면 :

<property name="eclipselink.query-results-cache" value="false"/> 
+1

고마워요. 내가 뭘 찾았는지, 나는 숙련 된 동료와 문제를 논의했다. & 그는 나에게 똑같은 설명을 해 주지만, 기술적 인 내용 없이는 다시 한 번 감사드립니다! –