2010-04-24 46 views
4

我使用Hibernate 3.5.1,它与EHCache 1.5捆绑在一起。HIbernate 3.5.1 - 我可以放入EHCache 2.0.1吗?

如果我想使用最新的EHCache版本(2.0.1),是否只是从我的项目中删除ehcache-1.5.jar,并用ehcache-core-2.0.1.jar替换?任何需要注意的问题?

另外 - Hibernate映射文件中的缓存“区域”与ehcache配置xml中的缓存“名称”相同吗?我想要做的是定义2个命名缓存区域 - 一个用于只读参考实体,不会改变(查找列表等),另一个用于所有其他实体。所以在ehcache中,我想定义两个元素;

<cache name="readonly"> ... </cache> 
<cache name="mutable"> ... </cache> 

然后在我的Hibernate映射文件,我将指定缓存用于每个实体:

<hibernate-mapping> 
    <class name="lookuplist"> 
     <cache region="readonly" usage="read-only"/> 
     <property> ... </property> 
    </class> 
</hibernate-mapping> 

请问这项工作?一些文档似乎暗示为每个映射类创建了单独的区域/缓存...

谢谢。

回答

2

如果我想使用最新版本的EHCache(2.0.1),是它只是一个从我的项目中移除了Ehcache-1.5.jar,并与ehcache的核心 - 2.0.1.jar更换的事?任何需要注意的问题?

根据有关使用的Ehcache作为Hibernate Second Level Cache的Ecache文档,你必须确实使用ehache-core.jar添加也改变Hibernate's configuration

另外 - Hibernate映射文件中的缓存“区域”与ehcache配置xml中的缓存“名称”相同吗?

是的。再次参考文档,这在Configuring ehcache.xml中有解释。

这会工作吗?一些文件似乎暗示着一个单独的区域/缓存获取每个映射类创建

文档并不意味着,它是写黑白色在Cache mappings,这是默认的:

region (optional: defaults to the class or collection role name): specifies the 
name of the second level cache region 

它会工作吗?技术上,是的。这是个好主意吗?我不确定。国际海事组织最好在Hibernate和Ehcache级别都有更好的粒度区域(特别是如果你打算使用分布式缓存和失效策略,你当然不想使所有实体无效)。我会使用Hibernate的默认值。

0

我有同样的问题, 如果您使用的是maven。

它更好地防止休眠从本身下载ehcache并提供您的ehcache条目。

 <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>3.2.6.ga</version> 
     <exclusions> 
      <exclusion> 
       <groupId>net.sf.ehcache</groupId> 
       <artifactId>ehcache</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

这样就不会下载内部的Ehcache在我的情况下,它是版本1.2.3

,然后把

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

在你的pom.xml

它应该工作。

相关问题