2013-06-30 175 views
0

我爲我的應用程序使用Hibernate 3.2.5。我正在嘗試執行Query Cache,但它不起作用。查詢緩存不工作

問題描述:

對於第一次,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. 

我相信我錯過了一些不會從緩存中獲取數據並因此觸及數據庫的東西。請讓我知道如何使這個Query Cache工作。

+0

是什麼讓你說它正在打擊數據庫?如果您只是依靠日誌文件中打印的select語句,那麼這不是正確的觀察。 – JSS

+0

是的,我依靠日誌文件中打印的select語句來檢查它是否是數據庫命中。請讓我知道什麼是其他方式/正確的方法來檢查它是否是數據庫? – user182944

+0

我等待得到這個答覆...但似乎我必須爲此創建一個不同的線程:( – user182944

回答

1

第二個查詢不可緩存,因此它不使用緩存。就如此容易。

請注意,如果這是您的真實代碼,您應該簡單地使用session.get(Dept.class, 1)來獲取部門。

+0

我錯過了錯過,謝謝。 – user182944