java - 无法清除休眠查询缓存
问题描述
在使用 Hibernate-core-5.1.14 时,我sessionFactory.getQueryCache().clear()
用来清除查询缓存。在迁移到 Hibernate-core-5.4.18 之后,因为现在没有这样的方法 getQueryCache() 可用 SessionFactoryImpl 所以我无法清除它。
在参考迁移文档sessionfactory-hierarchy-cleanup时,我知道了
SessionFactory 和 SessionFactoryImplementor 每个都有许多处理缓存区域的方法。自 5.0 以来,其中许多方法已被弃用,并且将被删除。但是,该功能已移入 org.hibernate.Cache 和 org.hibernate.engine.spi.CacheImplementor 合同,帮助实现 JPA 的 javax.persistence.Cache 角色。
然后在搜索中找到getDefaultQueryCache()
Hibernate 提供的替代方案org.hibernate.engine.spi.CacheImplementor
。为了清除查询缓存,我尝试使用它,CacheImplementor.getDefaultQueryResultsCache().clear()
但我无法仅在调用getDefaultQueryCache()
. 任何有关解决问题的提示或指导都是非常值得赞赏的。
解决方案
首先,我不确定您是否启用了查询缓存,您可以通过
<property
name="hibernate.cache.use_query_cache"
value="true" />
第二个单独的查询不被缓存,
大多数查询不会从缓存或其结果中受益。因此,默认情况下,即使启用查询缓存,单个查询也不会被缓存。每个需要缓存的特定查询必须手动设置为可缓存。这样,查询会在执行时查找现有的缓存结果或将查询结果添加到缓存中。
您可以阅读文档查询缓存部分。
推荐阅读
- vb.net - 如何在 VB.Net 中调整/更改自定义创建的用户控件的位置?
- datepicker - Antdesign Blazor 日期选择器选择窗格未根据日期选择器值反映
- python - 调用散景时与 Tornado 相关的错误
- python - 可以混合精度使用对象检测 api,还是可以在构建模型之前观察/修改模型的层?
- python - 如何让所有艺术家使用 Spotify API?
- linux - 安西布尔。从 {{ item }} 循环中获取特定值
- java - java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull
- mysql - 什么是查询用于在创建表时检查 Upper() 的约束
- ios - 来自 API 的数据需要很长时间才能在 webview 中加载
- php - 触发 Larvel 队列的一次性 API 调用,用于更新刀片文件中的单个列