【发布时间】:2012-01-03 16:17:41
【问题描述】:
我只是在探索 Ehcache 自填充 缓存作为休眠二级缓存。
hibernate 是否支持自填充缓存?
谁能帮我找到一些与该主题相关的示例实现/文档?
【问题讨论】:
标签: java hibernate caching ehcache second-level-cache
我只是在探索 Ehcache 自填充 缓存作为休眠二级缓存。
hibernate 是否支持自填充缓存?
谁能帮我找到一些与该主题相关的示例实现/文档?
【问题讨论】:
标签: java hibernate caching ehcache second-level-cache
VamsiKrishna, 我不太确定你想在这里实现什么,但我想你想避免两个线程从数据库加载同一个实体。现在,恐怕你无法做到这一点。首先,Hibernate 不在缓存中存储实体,而是对这些实体进行脱水表示。创建这些然后放置它们以便 Ehcache 层可以处理它们(它们可能会重新包装在一些其他内部类型 iirc 中),我认为这是不可能的(类型可访问性将是一个问题)。
此外,您可以使用 BlockingCache 来模拟行为并让 Hibernate 填充缓存。问题在于,如果我没记错的话,Hibernate 不会将空值放入缓存中。不这样做最终会锁定您的整个缓存。
长话短说,我认为你最好让 Hibernate 自己处理对缓存的并发访问(由缓存访问策略控制),因为其中没有任何东西真正意味着用户可以做......
【讨论】:
来自 ehcache 网站 - http://www.ehcache.org/documentation/user-guide/hibernate#Configure-Ehcache-as-the-Second-Level-Cache-Provider
在hibernate.cfg.xml中添加
<property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
【讨论】: