【问题标题】:Hibernate query cache not refreshed with latest record of database休眠查询缓存未使用数据库的最新记录刷新
【发布时间】:2015-05-16 08:19:24
【问题描述】:

我在使用休眠查询缓存时遇到以下问题。 我的带有条件的选择查询不返回任何结果,因为数据库中的数据与查询条件不匹配。在这种情况下,休眠将带有标识符的查询缓存保存为空白。我将记录插入到与查询条件匹配的数据库中,但查询缓存始终返回空值,而不是返回我添加的最新记录。有什么办法可以用更新的记录刷新查询缓存?

这是一个例子 - 从员工 emp 中选择 emp,其中 name='TEST' 上面的查询没有从数据库返回任何结果,所以查询缓存有空白作为上面查询键的标识符。有什么办法可以刷新缓存,以便如果数据库中记录 name='TEST',hibernate 将返回新记录?

谢谢

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    您可以通过驱逐缓存区域来做到这一点,该查询属于: sessionFactory.getCache().evictQueryRegion([regionName])

    该方法接受缓存区域名称作为参数。

    cache.evictDefaultQueryRegion(),如果您的查询缓存在默认查询缓存区域(即org.hibernate.cache.internal.StandardQueryCache

    如果您只打算使上述查询的缓存结果无效,我建议您为其使用指定的查询缓存(通过setCacheRegion() 方法调用)

    【讨论】:

    • 我有一个集群环境,我正在使用 JGroup 来复制缓存。我将如何驱逐另一个节点中的查询缓存?
    • 我已经解决了这个问题。我正在使用 ehcache 复制,而 StandardQueryCache 和 UpdateTimestampsCache 的 replicateUpdatesViaCopy 值为 false。我已将其更改为 true,现在查询缓存也正在复制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2013-12-20
    • 2020-06-10
    • 1970-01-01
    • 2016-10-28
    • 2011-03-07
    相关资源
    最近更新 更多