【问题标题】:Hibernate second level cachingHibernate 二级缓存
【发布时间】:2015-05-14 14:53:29
【问题描述】:

我可以在 Hibernate 中使用二级缓存来缓存查询 (createSQLQuery),例如:

List<Student> books = (List<Student>)session.createSQLQuery("select * from Student ");

我可以在 Hibernate 中使用二级缓存来缓存查询 (createQuery),例如:

Query query = session.createQuery("from Student where studentId = :id ");
query.setParameter("id", 5);
List<Student> list = query.list();

如果“是”,我可以使用什么 cache.provider_class? (SingletonEhCacheProvider 在 Hibernate 4.3.8 中已弃用)。

【问题讨论】:

    标签: java sql hibernate caching


    【解决方案1】:

    您可以将“查询缓存”与 createQuery 一起使用!您必须将 setCacheable(true) 添加到您的 HQL 查询中

    Query query = session.createQuery("from Student where studentId = :id ");
    query.setParameter("id", 5).setCacheable(true);
    

    你可以使用this configuraion(休眠4.3.8)

    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.region.factory_class">
    net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
    

    这对我有用

    【讨论】:

      【解决方案2】:

      如果你想在你的应用程序中使用 Hibernate 二级缓存,那么你需要对 hibernat.cfg.xml 文件进行一些更改。 在&lt;session-factory&gt;标签放

      &lt;property name="hibernate.cache.use_second_level_cache"&gt;true&lt;/property&gt;

      &lt;property name="hibernate.cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/property&gt; 最重要的是,将 &lt;cache usage=”read-write” /&gt; 放在每个实体的 hbm.xml 文件中 &lt;id&gt; 标签之后。 而已。

      【讨论】: