我正在配置我的hibernate项目以使用二级缓存提供程序,以便我可以利用查询缓存。
我在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
注释。是什么赋予了?我可以使用最新的替代供应商吗?
我正在使用hibernate版本3.4.0.GA,以防万一。
答案 0 :(得分:46)
是什么给出的?我可以使用最新的替代供应商吗?
它们已经被弃用,有利于实现新的Hibernate 3.3 / 3.5 SPI及其CacheRegionFactory
的类。这些实现分别是:
net.sf.ehcache.hibernate.EhCacheRegionFactory
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
新SPI的好处包括:
- SPI删除了Hibernate缓存管道中的同步。它是 离开了缓存实现 关于如何控制并发访问。 Ehcache,从1.6开始,删除 同步有利于CAS 做法。结果,重 工作量令人印象深刻。
- 新的SPI提供对缓存区域存储的精细控制 缓存策略。 Ehcache 2.0需要 这样做的好处是减少内存 使用。它提供只读,非严格 读写和读写策略, 所有集群安全。
- Ehcache 2.0很容易与Terracotta Server Array一起分发。这个 为您提供集群安全操作 (一致性),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
属性。
答案 1 :(得分: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异常
答案 2 :(得分:5)
EhCache docs说从Hibernate 3.3开始你应该使用:
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>
(或net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
)
答案 3 :(得分:4)
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