如何动态防止Hibernate在检索时更新缓存

时间:2018-03-22 12:36:02

标签: hibernate

我有缓存的“员工”记录。数据库包含的员工记录多于日常使用的记录。但是,我的应用程序提供了“出口所有”员工的工具。在导出all时,我宁愿不让Hibernate将检索到的记录添加到缓存中,因为绝大多数都不会在缓存中有用。将所有记录添加到缓存实际上是浪费资源(添加到缓存所花费的时间加上它可能导致较旧但更常规访问的记录从有限大小的缓存刷新)。

我读过关于javax.persistence.cache.retrieveMode(BYPASS告诉Hibernate直接从数据库中检索)但这是否也告诉Hibernate跳过更新缓存?如果没有,有没有办法实现这个目标?

注意:我的应用实际上使用的是Hibernate 3.6.4,所以我怀疑使用javax.persistence.cache.retrieveMode可能不是一个选项。因此,任何有关使用此旧版本实现所需行为的提示都将受到赞赏。但是,如果只能通过最新的Hibernate实现所需的行为,那么这可能正是我需要说服我的经理升级的时候; - )

1 个答案:

答案 0 :(得分:0)

可以通过如下设置Session上的cacheMode来暂时禁用Hibernate与第二级缓存的交互:

CacheMode cacheMode = session.getCacheMode();  // Usually CacheMode.NORMAL
session.setCacheMode(CacheMode.IGNORE);

// Execute the query
...

session.setCacheMode(cacheMode);  // Restore (best to do this in a finally block)