我有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实例缓存的。此实例不反映更新。应该执行select / cache lookup以加载当前的A实例。我的问题是:
如何在缓存两个结果时使关联正常工作。
注意:
我知道我可以强制A和B映射器使用单个缓存命名空间,因此当A更新时,它将刷新所有缓存的A和B查询。但请考虑我有10个A实例 - 这些实例每隔几分钟就会更新一次。和1百万B实例 - 这些实例每天更新一次。每次A更新时刷新所有B都是无效的。
答案 0 :(得分:0)
您应该使用相同的命名空间缓存。
mapperA中的:
< mapper namespace="mapperA">
< cache/>
...
mapperB中的:
< mapper namespace="mapperB">
< cache-ref namespace="mapperA"/>
...