【发布时间】:2013-07-26 04:21:35
【问题描述】:
几个缓存相关的Hibernate问题:
- 在 L1 缓存(基于会话的缓存)中,一旦会话关闭,缓存就会被丢弃/清除。但是使用 L2 缓存(应用程序/全局/分布式缓存),缓存什么时候被丢弃/清除/清除?有没有办法手动/以编程方式清除/刷新二级缓存?
- 您可以为二级缓存指定
EhCacheCacheProvider。但是 EhCache 需要运行时类路径上的ehcache.xml配置文件来配置缓存。我可以在ehcache.xml中使用 Hibernate L2 缓存的特定名称对其进行微调吗? - 如果程序 A 正在使用 Hibernate 管理的实体(一些处于持久状态的 POJO),因此被 Hibernate 主动管理/跟踪,并且单独的应用程序(程序 B)更新了相同的记录 - Hibernate 是否会自动更新内存中的 POJO?例如,我的
fizz.warWeb 应用程序正在连接到 MySQL 服务器并管理一个持久的User实例(对应于 MySQL 中的users表)。目前,该用户的电子邮件是john.smith@example.com。然后,与此同时,buzz.war(另一个 Web 应用程序)将同一users记录的电子邮件更新到jane.smith@example.com。 Hibernate 是否会自动更新User实例以包含更新?
【问题讨论】:
-
我在这里找到了#2(如何配置 EhCache XML 以与 Hibernate 一起使用)的答案:http://ehcache.org/documentation/user-guide/hibernate。直接来自该文档:“Hibernate 创建以域对象的完全限定名称命名的缓存。因此,例如,要为
com.somecompany.someproject.domain.Country创建缓存,请在 ehcache.xml 中创建类似于以下内容的缓存配置条目。 i>”。
标签: java hibernate caching ehcache