本机查询正在清除第二级缓存条目.来自7年前的hibernate论坛的回答说,HQL更新查询也清除了二级缓存.但这仍然是真的吗?
由于HQL查询具有要更新的确切字段,并且在哪个实体中,我认为不应该像session.save(..)调用常规一样难以表现.
Mar*_*iak 12
本机查询正在清除第二级缓存条目.
虽然有可能指定来自二级缓存的内容应该无效(或者甚至指定没有任何内容从缓存中逐出).看看伟大的博客文章http://www.link-intersystems.com/bin/view/Blog/Hibernate%27s+second+level+cache+and+n++queries ,这些都是彻底解释的.
为了防止Hibernate使缓存中的任何内容失效:
SQLQuery sqlQuery = session.createSQLQuery("ALTER SESSION SET NLS_COMP = 'BINARY'");
sqlQuery.addSynchronizedQuerySpace("");
int updatedEntities = sqlQuery.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
要指示Hibernate仅使Person实体缓存无效:
SQLQuery sqlQuery = session.createSQLQuery("UPDATE PERSON SET ... WHERE ...");
sqlQuery.addSynchronizedEntityClass(Person.class);
int updatedEntities = sqlQuery.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
来自7年前的hibernate论坛的回答说,HQL更新查询也清除了二级缓存.但这仍然是真的吗?
例:
entityManager.createQuery("delete from Person p where p.id = 1").executeUpdate();
Run Code Online (Sandbox Code Playgroud)
这将使"实体"缓存"仅"无效.
我不知道在HQL方面阻止Hibernate使特定实体的二级缓存失效的可能性.
我能挖到的最接近的东西是: http: //docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache
我想这与您使用的提供商有很大关系。
| 归档时间: |
|
| 查看次数: |
2702 次 |
| 最近记录: |