首页 文章

JPA 2级缓存

提问于
浏览
2

很抱歉提供不太具体的 Headers . 其实我很乱 .

我的实际问题:提高应用程序的性能 .

好事:通过JPA在整个应用程序中插入/更新数据 .

到目前为止使用的技术:带有JPA 2.0和hibernate 3.2的Spring 3.2框架 .

到目前为止,我们在代码中的任何地方都没有直接依赖Hibernate .

回到问题:

我计划为一些总是获取相同数据(下拉值)的查询实现二级查询缓存 .

我的第一个问题:JPA是否自己提供二级缓存(不使用EHcache或任何此类依赖)?

到目前为止我发现使用这个属性我们可以启用二级缓存

query.setHint("org.hibernate.cacheable", true);

我的第二个问题:我是否需要为Ehcache或Hibernate-Ehcache提供依赖?

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-ehcache</artifactId>
 <version>4.0.0</version>
</dependency>

或者我是否也需要提供

<dependency>
  <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache-core</artifactId>
  <version>${ehcacheVersion}</version>
</dependency>

我的第三个问题:我需要在persistence.xml中添加哪些属性 . 我确信这两个属性:

<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>

=====Thanks for the answer.This is the update might help the fellow developers.====
我正在制定需要定义的属性以启用EHcache,因为很多人都面临这种异常

Caused by: org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]

由于属性不匹配和依赖性不匹配 .

以下属性应该适用于hibernate 4.x以及Ehcache 2.4.3

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.cache.provider_configuration_file_resource_path" value="classpath:ehcache.xml" /> 
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/>

1 回答

  • 2

    我的第一个问题:JPA是否自己提供二级缓存(不使用EHcache或任何此类依赖)?

    不,它没有 . JPA只是一个标准,不提供任何实现 . Hibernate为JPA(EntityManager,EntityMangerFactory等)提供了实现以及它自己的ORM实现(Session,Session Factory等) . 因此,您需要EHCache来支持二级缓存 . 但是,您可以使用JPA annotations / config进行缓存,但这需要更改persistence.xml .

    以下两个链接说明了每个配置选项:

    我的第二个问题:我是否需要为Ehcache或Hibernate-Ehcache提供依赖?

    你需要添加ehcache-core,hibernate-ehcache和slf4j-simple(EHCache使用slf4j进行日志记录) . 有关依赖项详细信息,请查看此link上的Hibernate EHCache Maven依赖项部分 .

    我的第三个问题:我需要在persistence.xml中添加哪些属性 .

    如果你采用JPA方式,那么sample persistence.xml 将是:

    <persistence-unit name="FooPu" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        ...
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
        <properties>
          ...
          <property name="hibernate.cache.provider_class" value="org.hibernate.cache.SingletonEhCacheProvider"/>
          <property name="hibernate.cache.use_second_level_cache" value="true"/>
          <property name="hibernate.cache.use_query_cache" value="true"/>
        </properties>
      </persistence-unit>
    

相关问题