나는 JBoss 5.1.0 GA를 Hibernate와 함께 사용하고 있으며 이제 두 번째 레벨 캐시를 활성화하려고합니다. 내 Hibernate 설정에 다음 속성을 추가했다.동시 생성 이벤트
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.MultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.jbc2.query.localonly" value="true"/>
<property name="hibernate.cache.region_prefix" value="my_prefix" />
그리고 나는 다음과 같이 자주 변경하는 기대 실체 주석했습니다
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
이는 documentation에 대한 이해를 기반으로합니다.
응용 프로그램이 무섭게 보이는 메시지 (예 : 로그 스트림에서 WARN 또는 ERROR 메시지)없이 성공적으로 배포합니다. 짧은 시간 동안 (나는 이것을 볼 때 Hibernate 통계를 사용하고있다.) 캐싱을 보았지만 잠시 후에 (심지어 원격 액세스가없는 단일 사용자로 로그온했을 때조차도) 양식의 스택 추적을 얻는다.
"거래 새롭게 MyClass의 작성을 시도.이 거래 이 시작된 이후 이미 다른 (아마도 원격) 거래. 우리는 동시 생성 이벤트가에 의해 생성 을하고있다"
거대한 스택 트레이스를 따라 가면 결국 이름을 거슬러 올라갑니다. 내가 만든 쿼리는 다음 형식을 갖습니다.
SELECT x FROM X WHERE x.deleted = false
명명 된 쿼리에는 캐싱에 대한 추가 주석이 없습니다.
이 문제를 해결하는 방법에 대한 조언은 크게 감사하겠습니다. 첫째
확실하지는 않지만 캐시의 잠금 및 격리 설정을 사용하려고합니다. – Stas
이것은 도움이되었습니다 - mvcc-entity가 아닌 pessimistic-entity를 사용하여 모든 것이 잘되었습니다. –