2009-06-01 4 views
5

특정 비즈니스 이유 때문에 내 애플리케이션에서 Hibernate 2 차 레벨 캐시를 사용하고 있습니다. 엔티티 어노테이션을 더 이상 변경할 수 없습니다..어노테이션을 변경하지 않고 Hibernate의 특정 엔티티의 2 차 레벨 캐시를 어떻게 비활성화 할 수 있습니까?

내 프로젝트에서 Hibernate로부터 데이터베이스를 변경하는 것 외에도, Hibernate를 거치지 않는 다른 원시 SQL도 존재한다. 따라서, 하이버 네이트의 2 차 레벨 캐쉬 데이터는 네이티브 SQL로부터 데이터베이스가 갱신 된 후에 효력을 상실 할 수있다. 그렇기 때문에 에서 특정 엔터티에 대해 프로그래밍 방식으로나 주석을 변경하는 것 외의 방식으로 두 번째 수준의 캐시를 사용하지 않도록 설정해야합니다.

미리 감사드립니다.

답변

7

WARNING : 옌스 Schauder는 바와 같이, 그것은 maxElementsInMemory = "0"이 효과적으로 발생으로 역효과를 설정하여 메모리에 0 요소를 저장할으로 Ehcache를 구성하는 것이 불가능하다 - 캐시 무제한 크기를 설정한다. 이 문제는 Hibernate Caching 페이지에 언급되어 있지 않지만 Cache Configuration 페이지에 문서화되어 있습니다.

나는 설명서를 빨리 ​​검토했으며 아직 대안을 찾지 못했습니다. 이 답변을 직접 삭제할 수 없습니다. :-(

내 원래 제안 :.

당신은 짧은 TTL 시간에 두 번째 레벨 캐시의 구현 공급자를 구성 할 수 및/또는 특정 개체 유형의 0 항목을 저장하는

예 : 당신이 경우 으로 Ehcache를 사용하여, 당신은 ehcache.xml에서 구성 할 수 있습니다 : *

<cache 
name="com.problematic.cache.EntityName" 
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName 
overflowToDisk="false" <<== Do not overflow any entries to disk 
/> 

은으로 Ehcache 설명서에 Hibernate Caching를 참조

.
+0

감사합니다. Matej, 저는 이것이 제가 원했던 답변이라고 생각합니다! 엔티티 클래스가 다른 엔티티 프로젝트에 배치되는 동안 내 ehcache.xml이 내 실행 가능 프로젝트의 클래스 경로에 배치되는 또 다른 문제가 있습니다. Hibernate는 내 ehcache.xml에서 기본 캐시 설정만을 읽은 것 같습니다. 이는 : Hibernate는 읽지 않습니다 내 다른 엔티티 ehcache.xml의 캐시 설정 –

+0

, 이름 속성은 정확하게 Hibernate는 그렇게 할 수없는 설정되어 있지 않습니다 name 속성에 무엇을 써야 하는가? –

+0

Hibernate는 객체의 캐시를 객체 이름으로 식별한다. 기본적으로 클래스 이름은 엔티티 이름으로 사용되지만 Hibernate 매핑 파일에서 변경할 수있다. (또는 주석). 당신이 Hibernate 매핑에서 엔티티 이름을 변경하지 않았다면, 당신은 단순히 완전 클래스 이름을 사용해야 만한다. 그렇지 않으면 Hibernate 매핑에서 명시 적으로 명시된 (심볼릭) 엔티티 이름을 사용한다 .. – Matej

1

Terracotta 3.1 이상에서는 테라코타 개발자 콘솔을 사용하여 구성 (정적)과 런타임시 둘 다에서 영역 별 Hibernate 2 차 수준 캐시를 활성화/비활성화 할 수 있습니다.

클러스터 또는 클러스터 전체의 개별 노드에 대해 캐시 및 최대 절전 모드에 대한 실시간 통계를 모니터링 할 수도 있습니다.

테라코타는 오픈 소스입니다. 자세한 내용은 Terracotta for Hibernate을 확인하십시오.

관련 문제