gpt4 book ai didi

java - MyBatis - 缓存刷新后不更新嵌套结果

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:23 25 4
gpt4 key购买 nike

我有 2 个映射器 mapperA 和 mapperB。

mapperA 的结果映射 A 仅包含结果元素(简单属性)并缓存在自己的命名空间中。

mapperB 有结果映射 B,它包含与 A 的关联(select 语句 findById)并且也缓存在自己的命名空间中。

问题是:

  • mapperB.findById(加载 B 和关联的 A - 两者都被缓存)
  • mapperA.findById(没有选择执行的 A 被缓存)
  • mapperA.update(更新一些 A - 缓存 A 被刷新)
  • mapperA.findById(选择执行 - 加载的 A 已更新)
  • mapperB.findById - 这就是问题 - 没有执行选择,因为 B 被缓存了。但它与 A 实例一起缓存。此实例不反射(reflect)更新。应该执行选择/缓存查找以加载当前 A 实例。

我的问题是:

当两个结果都被缓存时,如何使关联正常工作。

注释:

我知道我可以强制 A 和 B 映射器使用单个缓存命名空间,因此当 A 更新时,它将刷新所有缓存的 A 和 B 查询。但考虑到我有 10 个 A 实例——这些实例每隔几分钟就会更新一次。还有 100 万个 B 实例——这些实例每天更新一次。每次更新 A 时刷新所有 B 的效率不高。

最佳答案

你应该使用相同的命名空间缓存。

在映射器A中:

< mapper namespace="mapperA">

< cache/>

...

在映射器B中:

< mapper namespace="mapperB">

< cache-ref namespace="mapperA"/>

...

关于java - MyBatis - 缓存刷新后不更新嵌套结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com