本机查询正在清除二级缓存条目。7岁的hibernate论坛的回答说,HQL更新查询也清除了二级缓存。但这仍然是真的吗?
由于HQL查询具有要更新的确切字段,以及在哪个实体中,我认为像调用常规session.save(..)一样操作起来并不难。
发布于 2013-01-18 04:04:35
本机查询正在清除二级缓存条目。
但是,可以指定二级缓存中的哪些内容应该无效(甚至可以指定不从缓存中逐出任何内容)。看一看很棒的博客文章http://www.link-intersystems.com/bin/view/Blog/Hibernate%27s+second+level+cache+and+native+queries,里面对此进行了彻底的解释。
要防止Hibernate使缓存中的任何内容无效:
SQLQuery sqlQuery = session.createSQLQuery("ALTER SESSION SET NLS_COMP = 'BINARY'");
sqlQuery.addSynchronizedQuerySpace("");
int updatedEntities = sqlQuery.executeUpdate();要指示Hibernate仅使Person实体缓存无效,请执行以下操作:
SQLQuery sqlQuery = session.createSQLQuery("UPDATE PERSON SET ... WHERE ...");
sqlQuery.addSynchronizedEntityClass(Person.class);
int updatedEntities = sqlQuery.executeUpdate();在7年前的hibernate论坛上回答说,HQL update查询也清除了二级缓存。但这仍然是真的吗?
示例:
entityManager.createQuery("delete from Person p where p.id = 1").executeUpdate();这将使“仅”Person实体缓存无效。
当涉及到HQL时,我没有意识到有任何可能阻止Hibernate使特定实体的二级缓存无效。
发布于 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项目可能会开放来实现一个补丁:)
发布于 2011-05-24 10:00:32
我能找到的最接近的东西是:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache
我想这与你使用的提供商有很大关系。
https://stackoverflow.com/questions/6095173
复制相似问题