Hibernate禁用查询缓存

5

以下问题:

我创建了一个查询,以显示MYSQL表的所有条目,如果我编辑一个字段并再次执行查询,则会得到与第一个查询相同(旧)的结果。

似乎Hibernate缓存了结果。我尝试使用

query.setCachable(false)

"hibernate.cache.use_second_level_cache"

"cache.provider_class"

"org.hibernate.cacheable"

刷新和关闭会话

但什么都不起作用


我不明白你尝试了什么(像你这样抛出一堆选项是相当不清楚的)。另外,我想看看查询。 - Pascal Thivent
这是一个在Servlet / JSP页面上的代码。Query query = session.createQuery("from MyTable"); query.setCacheable(false); List<MyTable> bar = query.list();第一次调用时,我会获取表中的条目,然后手动编辑一些字段。如果我再次调用该函数(例如通过刷新/重新加载),我将获得与之前相同的结果。 - Patrick
你在修改对象后保存了吗?是否涉及到事务处理? - matt b
好的,我忘记提交事务。 - Patrick
3个回答

4
我认为您想要的配置是:
hibernate.cache.use_query_cache = false

Reference.


2
这意味着查询缓存根本不是您的问题。 - matt b

2

您是否从未将更改的条目保存或更新到 Hibernate 中?当缓存返回错误的结果时,通常表示其他方面存在问题。


我手动更改了表中的字段,并且我也提交了它。 - Patrick
你能否更新你的问题并附上代码,或者至少与编辑和更新条目相关的片段? - Peter Tillemans

1

这与第二个或查询缓存无关,它们已经默认禁用了!在您的情况下可能有帮助的是调用session.refresh(yourEntity),以便Hibernate重新读取实体的状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接