当前位置: 首页 > 面试题库 >

如何使用Hibernate 3.5.2配置JPA 2.0以将EHCache用作2级缓存和查询缓存?

顾靖
2023-03-14
问题内容

我找到了一些说明,说明如何配置纯hibernate模式以使用EHCache。但是我找不到任何有关如何配置JPA2.0
EntityManager以使用缓存的说明。Hibernate 3.5.2是我的JPA2.0提供程序。

编辑// @Cacheable(true)对实体足够了吗?还是应该使用@org.hibernate.annotations.Cache配置实体?


问题答案:

我找到了一些说明,说明如何配置纯hibernate模式以使用EHCache。但是我找不到任何有关如何配置JPA2.0
EntityManager以使用缓存的说明。Hibernate 3.5.2是我的JPA2.0提供程序

使用JPA配置L2缓存提供程序的方式与原始Hibernate类似。

默认情况下,Hibernate 3.5随EhCache
1.5一起提供(请参阅将Ehcache配置为第二级缓存),如果您想使用Hibernate提供的
官方 缓存提供程序(hibernate-ehcache如果使用的是Maven),请声明:

<!-- This is the provider for Ehcache provided by Hibernate, using the "old" SPI -->
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>

如果要使用EhCache 2.x,则需要使用EhCache提供的提供程序,该提供程序支持带有的 Hibernate 3.3 / 3.5 SPI
CacheRegionFactory。采用:

<!-- The region factory property is the "new" property (for Hibernate 3.3 and above) -->
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheReghtml" target="_blank">ionFactory">

例如创建,或

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

强制Hibernate使用单身的Ehcache CacheManager。

然后激活L2缓存和查询缓存:

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

这用于Hibernate L2缓存设置。

@Cacheable(true)是否足以用于实体?还是应该使用@ org.hibernate.annotations.Cache配置实体?

从理论上讲,@Cacheable应当替代Hibernate专有注释,并且应与shared-cache-mode元素结合使用:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
  <persistence-unit name="FooPu" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    ...
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    <properties>
      ...
    </properties>
  </persistence-unit>
</persistence>

但是,正如前面的问题中提到的那样,初始实验并未成功(它可能与HHH-5303有关,我不能说,我没有做太多研究)。因此,我建议坚持使用专有注释。

参考文献

  • Hibernate EntityManager参考指南
    • 2.2.1包装
  • JPA 2.0规范
    • 第3.7.1节“共享缓存模式元素”
    • 第11.1.7节“可缓存的注释”

资源资源

  • Ehcache 2.0支持新的Hibernate 3.3缓存提供程序
  • 将Ehcache配置为二级缓存
  • hibernate二级缓存


 类似资料:
  • 如何配置JBOSS Infinispan以使用hibernate 2级缓存。我使用的是Spring Boot应用程序,使用的是Spring Data JPA,它已配置为使用Hibernate。我的应用程序没有任何类型的xml文件。我不熟悉这种缓存。因此,请提供详细的解决方案。

  • 问题内容: 在我的Spring驱动的应用程序中,我使用Hibernate(4.2.15.Final)和EhCache(2.6.9)作为第二级缓存,在标准的持久层中进行了设置。 一切正常。但是,将条目放入第二级缓存有时会花费一些时间。 我已经在一个显式文件中配置了域模型类的缓存(我没有配置默认缓存): 在持久性上下文启动时,我收到以下INFO消息记录: 以及执行期间的以下警告 AFAIK 必须调整放

  • 我的应用程序使用Hibernate和EhCache作为二级缓存提供者。该应用程序部署在Wildfly 8.2上。二级缓存按预期配置并工作,但我不知道如何以通用方式在echache.xml配置中为二级缓存提供单独的配置。目前我的设置如下: 实体: pesistence.xml 还有ehcache.xml 虽然我将实体配置为使用ENTITY_ L2_ application.war#app_PU.EN

  • 我在我的web应用程序中使用hibernate ehcache。我缓存了列表,如下所示。 EHCACHE.xml 我的输出: 我的Ebtity Class: 每次放置计数增加 11。但没有其他值更改。为什么第二级缓存未命中? 为什么每次都执行查询而不是从二级缓存中获取结果? 为什么第二级放置计数在我命中它应该更新而不是插入的同一查询时增加?任何帮助都将不胜感激!!!

  • 我有一个spring/hibernate项目,我试图通过ehcache和terracotta将二级缓存添加到hibernate。一切似乎都很好,我甚至可以在terracota控制台中看到我试图缓存的实体的条目。但根据数据库的统计数据和日志,根本没有缓存任何内容! 负载命中率是0%,负载统计也是0。我做错了什么? 这是我所做的,我通过maven添加了所需的罐子。 更改了我的Hibernate属性以启

  • 问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性: