19

我正在将我的休眠项目配置为使用二级缓存提供程序,以便我可以利用查询缓存。

我向 ehcache 添加了一个依赖项:

   <dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-core</artifactId>
    <version>2.2.0</version>
   </dependency>

我认为我想使用的提供者类是:

net.sf.ehcache.hibernateEhCacheProvider

当我在 Eclipse 中查看引用的库时,我看到了@Deprecated注释EhCacheProvider,还有SingletonEhCacheProvider. 是什么赋予了?是否有我可以使用的最新替代提供商?

我正在使用休眠版本 3.4.0.GA,以防万一。

4

4 回答 4

47

是什么赋予了?是否有我可以使用的最新替代提供商?

它们已被弃用,取而代之的是实现新的 Hibernate 3.3/3.5 SPI 及其CacheRegionFactory. 这些实现分别是:

  • net.sf.ehcache.hibernate.EhCacheRegionFactory
  • net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

新 SPI 的好处包括:

  • SPI 删除了 Hibernate 缓存管道中的同步。如何控制并发访问由缓存实现决定。从 1.6 开始,Ehcache 删除了同步化以支持 CAS 方法。对于繁重的工作负载,结果令人印象深刻。
  • 新的 SPI 对缓存区域存储和缓存策略提供了更细粒度的控制。Ehcache 2.0 利用这一点来减少内存使用。它提供只读、非严格读写和读写策略,所有集群安全。
  • Ehcache 2.0 很容易与 Terracotta 服务器阵列一起分发。这为您提供了集群安全操作(一致性)、HA 和超出进程内缓存限制的扩展,这就是当今大多数 Hibernate 用户使用 Ehcache 的方式。现有的 ehcache.jar 和 ehcache-terracotta.jar 提供了客户端库。(...)

因此,我们鼓励您使用新的实现。配置通过以下属性完成:

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

这取代了hibernate.cache.provider_class财产。

参考

于 2010-09-11T07:40:31.853 回答
16

如果你想使用Hibernate 4.0.0.Final。对于 hibernate.cache.region.factory_class 属性的值,使用:

  • org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory而不是net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
  • org.hibernate.cache.ehcache.EhCacheRegionFactory代替net.sf.ehcache.hibernate.EhCacheRegionFactory

否则你会得到一些内部 ClassNotFound 异常

于 2012-01-02T14:20:19.520 回答
7

EhCache 2 现在已弃用并停止使用。您应该改用 EhCache 3。在 5.3 之后的 Hibernate 版本中,建议使用 JSR-107 (JCache)。为此,需要 2 个依赖项:

<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jcache</artifactId>
     <version>your_hibernate_version</version>
</dependency>

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.6.3</version>
    <scope>runtime</scope>
</dependency>

第一个提供了与 Hibernate 兼容的 JSR-107 API。第二个是实际的缓存实现——EhCache 3。

RegionFactory必须使用新的:

hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
于 2019-02-19T21:02:12.040 回答
5

EhCache 文档说,从 Hibernate 3.3 开始,您应该使用:

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

(或net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

于 2010-09-11T07:38:01.013 回答