2013-06-30 5 views
0

내 응용 프로그램에 Hibernate 3.2.5를 사용하고 있습니다. Query Cache을 구현하려고하지만 작동하지 않습니다.쿼리 캐시가 작동하지 않습니다.

문제 설명 : 처음

는 DB가 타격 데이터를 가져와 캐시입니다. 두 번째로 같은 쿼리에 대해 캐시에서 데이터를 가져 오는 대신 DB에 다시 기록됩니다. 두 번째로 DB를 다시 치기보다는 캐시에서 가져 오길 원합니다.

<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
<property name="hibernate.cache.use_query_cache">true</property> 
<property name="hibernate.cache.use_second_level_cache">true</property> 

파일 생성 :

Query Cache을 가능하게하기 위해, 나는 cfg.xml 파일에 아래 항목을 만들어 ehcache.xml을하고 hbm.xml 파일에 아래 항목 추가 : 아래는

<cache usage="read-only" /> 

을 시도한 코드 :

SessionFactory sf = new Configuration().configure("trial.cfg.xml").buildSessionFactory(); 
    Session session = sf.openSession(); 

    List departments1 = session.createQuery("from Dept dept where dept.deptId = 1") 
      .setCacheable(true) 
      .setCacheRegion("departmentId") 
      .list();   
    //Some business operations  
    session.flush(); 
    session.close(); 
    //Some business operations 
    Session session1 = sf.openSession();   
    List departments2 = session1.createQuery("from Dept dept where dept.deptId = 1").list();   
    //In the above line again it is hitting the DB rather than taking it from the cache. 

캐시에서 데이터를 가져 오지 않아서 DB를 치는 것이 아니라고 생각합니다. 이 방법을 알려주는 것이 부탁입니다 Query Cache.

+0

당신이 데이터베이스를 때리는 것은 무엇이라고 말합니까? 로그 파일에 인쇄 된 select 문에만 의존한다면 올바른 관찰이 아닙니다. – JSS

+0

예 DB 히트 여부를 확인하기 위해 로그 파일에 인쇄 된 select 문을 사용했습니다. 친절하게도 DB가 아닌지 확인하는 다른 방법/적절한 방법은 무엇인지 알려주시겠습니까? – user182944

+0

나는 이것에 대한 답장을 받기를 기다렸다 ...하지만 이걸 위해 다른 스레드를 만들어야 할 것 같다. ( – user182944

답변

1

두 번째 쿼리는 캐시 할 수 없으므로 캐시를 사용하지 않습니다. 저것과 같이 쉬운.

실제 코드 인 경우 session.get(Dept.class, 1)을 사용하여 부서를 가져와야합니다.

+0

내 실수로 그, 그리워. – user182944

관련 문제