4

我想在我的休眠项目中使用二级缓存,但我对休眠二级缓存了解一点,谁能解释我应该如何在我的代码中使用它以及我需要什么配置和 .jar 文件?我将这些设置设置为我的 hibernate.cfg.xml 文件

 <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>

并添加这些 jar 文件ehcache-1.6.1.jar, ehcache-1.6.1-javadoc.jar, ehcache-1.6.1-sources.jar 我想知道我应该更改任何其他配置吗?

以及如何理解我的项目使用二级缓存?

如果只是把这个设置,休眠自动使用这个或者我必须在我的 .java 类中使用其他代码(如任何注释或其他东西)

4

2 回答 2

5

您要查找的注释是org.hibernate.annotations.Cache。基本用法是:

@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public MyEntity {
    ...

  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
  public List<ElementType> getSomeCollection() {
    ...
  }
}

对于查询,您需要通过将属性设置为 true 并在其声明中指定查询是可缓存的(对于命名查询)或通过调用查询实例 来启用查询缓存。hibernate.cache.use_query_cachesetCacheable(true)

综上所述,您需要非常小心缓存并真正了解您在做什么,否则弊大于利。不要将其视为“快速修复” - 例如,缓存所有内容绝对是错误的做法。

于 2009-08-02T05:57:17.003 回答
4

您的设置将使二级缓存和查询缓存可用于您的项目,但您仍需要为特定实体、集合和查询启用它。这需要一些仔细的计划,因为您需要了解一些权衡。一般来说,二级缓存和查询缓存适用于只读或多读数据,但不适用于易失性数据。如果您还没有它,我建议您使用 Hibernate 获取 Java Persistence的副本。它对主题的处理非常好。

于 2009-08-01T14:17:28.493 回答