0

我正在为我的应用程序使用 Hibernate 3.2.5。我正在尝试实施Query Cache,但它不起作用。

问题描述:

第一次命中数据库,获取并缓存数据。第二次,对于相同的查询,数据库再次被命中,而不是从缓存中获取数据。第二次,我希望它从缓存中获取,而不是再次访问数据库。

为了启用Query Cache,我在文件中做了以下条目cfg.xml

<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>

创建文件: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工作。

4

1 回答 1

1

第二个查询不可缓存,因此它不使用缓存。就如此容易。

请注意,如果这是您的真实代码,您应该简单地使用session.get(Dept.class, 1)获取部门。

于 2013-06-30T12:49:24.173 回答