Hibernate 为什么不推荐使用EhCacheProvider?

Hibernate 为什么不推荐使用EhCacheProvider?,hibernate,caching,ehcache,terracotta,Hibernate,Caching,Ehcache,Terracotta,我正在将hibernate项目配置为使用二级缓存提供程序,以便利用查询缓存 我向ehcache添加了一个依赖项: <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.2.0</version> </dependency> 当我

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

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

   <dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-core</artifactId>
    <version>2.2.0</version>
   </dependency>
当我查看eclipse中引用的库时,我看到
EhCacheProvider
上的
@Deprecated
注释,以及
SingletonEhCacheProvider
上的注释。有什么好处?是否有最新的替换供应商可供我使用

我使用的是hibernate版本3.4.0.GA,以防万一。

我说从hibernate 3.3开始,您应该使用:

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

net.sf.ehcache.hibernate.EhCacheRegionFactory
(或
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

有什么好处?是否有最新的替换供应商可供我使用

它们已经被弃用,转而支持使用其
CacheRegionFactory
实现新的Hibernate 3.3/3.5 SPI的类。这些实现分别是:

  • net.sf.ehcache.hibernate.EhCacheRegionFactory
  • net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
新SPI的好处包括:

  • SPI删除了Hibernate缓存管道中的同步。它是 由缓存实现决定 关于如何控制并发访问。 删除了从1.6开始的Ehcache 有利于CAS的同步化 方法结果,对于重 工作量令人印象深刻
  • 新的SPI对缓存区域和存储提供了更细粒度的控制 缓存策略。Ehcache 2.0需要 这样做的好处是减少内存 使用。它提供只读、非严格的 读写和读写策略, 所有群集都是安全的
  • Ehcache2.0很容易与Terracotta服务器阵列一起分发。这 为您提供群集安全操作 (一致性)、HA和超出 进程内缓存的限制 这是大多数Hibernate用户使用的方式 我今天去。现有的 ehcache.jar和ehcache-terracotta.jar 它提供了客户端库。(……)
因此,我们鼓励您使用新的实现。通过以下属性完成配置:

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

net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
它替换了hibernate.cache.provider类的属性

工具书类
  • Hibernate博客
  • EhCache文档

如果您希望使用Hibernate 4.0.0.Final。对于Hibernate.cache.region.factory\u类属性的值,请使用:

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

否则,最终会出现一些内部ClassNotFound异常

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

<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>

非常好的观点…这是一位陶土工程师的原因:(->第二篇帖子)在这里不起作用,因为找不到类:org.hibernate.cache.TimestampsRegion。我在类路径上有ehcache、jcache和hibernate 5。jcache是ehcache吗?我很困惑。什么是JCache。为什么eCacherRegionFactory类仍然没有被弃用。它也没有获取EhCache的配置文件。xml@mmm版本3.0中的Ehcache是一个JCacheAPI实现(也称为JSR-107)。看看Ehcache文档:这是否意味着我现在必须对我的实体进行注释?我以前没必要这么做。我的旧配置现在不起作用。我在这里发了一个新帖子:
<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.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory