很抱歉提供不太具体的 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 回答
不,它没有 . JPA只是一个标准,不提供任何实现 . Hibernate为JPA(EntityManager,EntityMangerFactory等)提供了实现以及它自己的ORM实现(Session,Session Factory等) . 因此,您需要EHCache来支持二级缓存 . 但是,您可以使用JPA annotations / config进行缓存,但这需要更改persistence.xml .
以下两个链接说明了每个配置选项:
使用Hibernate specific classes / annotations进行缓存 .
使用JPA specific类/注释进行缓存(使用Hibernate as JPA provider)
你需要添加ehcache-core,hibernate-ehcache和slf4j-simple(EHCache使用slf4j进行日志记录) . 有关依赖项详细信息,请查看此link上的Hibernate EHCache Maven依赖项部分 .
如果你采用JPA方式,那么sample
persistence.xml
将是: