首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HQL更新是否清除二级缓存?

HQL更新是否清除二级缓存?
EN

Stack Overflow用户
提问于 2011-05-23 17:15:15
回答 3查看 3K关注 0票数 17

本机查询正在清除二级缓存条目。7岁的hibernate论坛的回答说,HQL更新查询也清除了二级缓存。但这仍然是真的吗?

由于HQL查询具有要更新的确切字段,以及在哪个实体中,我认为像调用常规session.save(..)一样操作起来并不难。

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 04:04:35

本机查询正在清除二级缓存条目。

  1. 本机查询(实际上这只适用于本机插入/删除/更新,而不是查询)会使所有缓存(整个缓存)的二级缓存条目无效。我已经用Hibernate的当前稳定版本4.1.9验证了这一点。这是明智的,因为Hiberante不可能知道数据库中发生了什么变化,所以唯一的选择是使整个二级缓存无效。在严重依赖二级缓存的某些系统中,这可能是一个严重的问题。

但是,可以指定二级缓存中的哪些内容应该无效(甚至可以指定不从缓存中逐出任何内容)。看一看很棒的博客文章http://www.link-intersystems.com/bin/view/Blog/Hibernate%27s+second+level+cache+and+native+queries,里面对此进行了彻底的解释。

要防止Hibernate使缓存中的任何内容无效:

代码语言:javascript
复制
SQLQuery sqlQuery = session.createSQLQuery("ALTER SESSION SET NLS_COMP = 'BINARY'");
sqlQuery.addSynchronizedQuerySpace("");  
int updatedEntities = sqlQuery.executeUpdate();

要指示Hibernate仅使Person实体缓存无效,请执行以下操作:

代码语言:javascript
复制
SQLQuery sqlQuery = session.createSQLQuery("UPDATE PERSON SET ... WHERE ...");
sqlQuery.addSynchronizedEntityClass(Person.class);
int updatedEntities = sqlQuery.executeUpdate();

在7年前的hibernate论坛上回答说,HQL update查询也清除了二级缓存。但这仍然是真的吗?

  1. HQL只会使二级缓存区域失效,该二级缓存区域与您正在执行某些插入/更新/删除操作的实体相关。这是有意义的,因为Hibernate知道哪些实体受到HQL的影响,它只能清除该实体的二级缓存区域。

示例:

代码语言:javascript
复制
entityManager.createQuery("delete from Person p where p.id = 1").executeUpdate();

这将使“仅”Person实体缓存无效。

当涉及到HQL时,我没有意识到有任何可能阻止Hibernate使特定实体的二级缓存无效。

票数 12
EN

Stack Overflow用户

发布于 2011-05-26 22:53:26

当使用Hibernate 3.2.x运行时,我们确实看到HQL更新清除了二级缓存

作为验证您的个人设置的一种简单方法,实现如下所示:

http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp-reloaded.html

在运行HQL更新事务之前和之后,请注意该页面上的详细信息...

或者直接在代码中和/或使用JMX收集统计数据

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/performance.html#performance-monitoring

至于改进的行为,Hibernate项目可能会开放来实现一个补丁:)

票数 1
EN

Stack Overflow用户

发布于 2011-05-24 10:00:32

我能找到的最接近的东西是:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache

我想这与你使用的提供商有很大关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6095173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档