HIbernate 3.5.1 - 我可以直接放入 EHCache 2.0.1 吗?

Dav*_*vid 5 java orm hibernate ehcache

我使用的是 Hibernate 3.5.1,它捆绑了 EHCache 1.5。

如果我想使用最新的 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>
Run Code Online (Sandbox Code Playgroud)

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

<hibernate-mapping>
    <class name="lookuplist">
        <cache region="readonly" usage="read-only"/>
        <property> ... </property>
    </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

那行得通吗?一些文档似乎暗示为每个映射类创建一个单独的区域/缓存......

谢谢。

Pas*_*ent 2

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

根据有关使用 Ehcache 作为Hibernate 二级缓存的Ecache 文档,您确实必须使用 ehache-core.jar,但还必须更改Hibernate 的配置

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

是的。再次,请参阅文档,这在配置 ehcache.xml中进行了解释。

那行得通吗?一些文档似乎暗示为每个映射类创建一个单独的区域/缓存

文档并不暗示,缓存映射中白底黑字写的是这是默认值:

region (optional: defaults to the class or collection role name): specifies the 
name of the second level cache region 
Run Code Online (Sandbox Code Playgroud)

它会起作用吗?从技术上来说,是的。这是不是一个好主意?我不知道。IMO 最好在 Hibernate 和 Ehcache 级别都拥有更细粒度的区域(特别是如果您计划使用分布式缓存和失效策略,您当然不希望使所有实体失效)。我会使用 Hibernate 的默认值。