假设有多个 Java 应用程序共享一个公共(public)实体模块(实体类 + Hibernate XML 映射)。目前,实体未启用缓存(映射中没有 <cache.../>
元素)。
大多数应用程序主要关注编辑单个实体,因此它不能依赖二级缓存。
现在,实现了一个新的应用程序
- 应该使用相同的实体映射
- 但必须使用二级和查询缓存。
如何配置缓存?
几个观察结果:
我无法添加
<cache.../>
映射元素,因为这会破坏其他未配置此类缓存且不受我影响的应用程序:Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]
- 我找不到激活实体以在其映射之外进行缓存的方法。为
ehcache.xml
中的实体设置缓存区域没有帮助 - 即使我可以更改所有其他应用程序并添加
<cache.../>
对于实体映射,通过设置hibernate.cache.use_second_level_cache=false
禁用缓存不起作用尽管在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html中是这么说的, 表 3.5
最佳答案
看起来你可以使用 <class-cache>
在 hibernate.cfg.xml
中配置缓存的元素而不是在实体映射中,请参阅 3.8. XML configuration file .
我想您可以负担得起创建自定义 hibernate.cfg.xml
这将使用现有的映射,如果没有,则有 Configuration.setCacheConcurrencyStrategy()
可能也有帮助的方法。
关于java - 具有一个 Hibernate 映射的多个二级缓存设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8576483/