首页 > 解决方案 > 无法清除休眠查询缓存

问题描述

在使用 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(). 任何有关解决问题的提示或指导都是非常值得赞赏的。

标签: javaspringhibernategrails-ormspring-orm

解决方案


首先,我不确定您是否启用了查询缓存,您可以通过

<property
    name="hibernate.cache.use_query_cache"
value="true" />

第二个单独的查询不被缓存,

大多数查询不会从缓存或其结果中受益。因此,默认情况下,即使启用查询缓存,单个查询也不会被缓存。每个需要缓存的特定查询必须手动设置为可缓存。这样,查询会在执行时查找现有的缓存结果或将查询结果添加到缓存中。

您可以阅读文档查询缓存部分。


推荐阅读