2010-03-02 4 views

답변

5

Hibernate는 질의가 캐시 될 때 질의 결과로 생성 된 엔티티들의 ID를 캐싱 할 것이다.

매우 중요하게도 엔티티 자체는 캐시하지 않으며 ID 만 캐시합니다. 즉, 두 번째 레벨 캐시에서 해당 엔티티도 캐시 할 수 있도록 설정해야합니다. 그렇지 않으면, NHiberate는 질의 캐시에서 엔티티의 ID를 얻지 만 실제 엔티티를 얻기 위해 데이터베이스로 가야한다. 그것은 처음부터 데이터베이스에가는 것보다 비용이 많이들 수 있습니다!

중요 : 쿼리는 정확한 SQL 및 매개 변수 값을 기반으로 캐시됩니다. 둘 중 하나라도 차이가 나면 데이터베이스가 손상 될 것입니다. 따라서 입력에 약간의 차이가있는 쿼리 만 캐시하고 싶을 것입니다.

0

nHibernate는 데이터 저장소에 액세스 할 필요가 없으므로 캐시의 내용을 액세스합니다.

+0

아마도 엔티티 캐싱 일 것입니다. – Amitabh

2

캐싱을 활성화하면 쿼리를 실행할 때 nHibernate가 쿼리 결과를 어딘가에 저장합니다. SAME 매개 변수를 사용하여 쿼리를 다시 실행하려고하면 캐시가 아닌 데이터베이스에서 결과를 얻을 수 있습니다. 물론 훨씬 빠릅니다! 그러나 다른 애플 리케이션이 백그라운드에서 데이터베이스를 수정할 수 있다는 것을주의하십시오! 그러나 nHibernate는 캐시를 업데이트 할 수있다.

관련 문제