2012-01-03 1 views
3

Hibernate와 Ehcache를 2 차 레벨 캐시 (2LC) 구현으로 사용할 때 WHERE 절을 사용하여 COUNT 연산을 수행 할 때이 캐시를 사용합니까?하이버 네이트의 2 차 레벨 캐시는 COUNT() 연산에 사용할 수 있습니까?

SQL에서 수행중인 쿼리는 SELECT COUNT(id) FROM table WHERE someColumn > 100입니다. 어떤 경우에는 전달 된 값이 매번 다를 수 있으며, 때로는 항상 같을 수 있습니다.

이것은 2LC의 범위를 벗어난 것으로 가정하고 대신 '수동으로'(쿼리 결과를 캐시하고 기본 데이터가 변경 될 때마다 해당 캐시를 무효화) 관리해야합니다.

답변

3

당신이 맞습니다. 이것은 L2 캐시가 제공하는 것입니다. 그러나 query cache 트릭을 할 것입니다.

기본적으로 Hibernate는 명명 된 매개 변수 (예 : [100] 튜플)와 org.hibernate.cache.StandardQueryCache 캐시의 쿼리 결과 사이의 매핑을 캐시합니다. table (더 정확하게는 쿼리에 사용 된 테이블)이 변경되면 캐시도 무효화됩니다. 각 테이블의 최종 수정 시간은 org.hibernate.cache.UpdateTimestampsCache 캐시에 저장됩니다.

은 참조 :