我有2個映射器mapperA和mapperB。MyBatis - 緩存刷新後嵌套結果不會更新
mapperA有結果圖A,其中只包含結果元素(簡單屬性)並緩存在自己的名稱空間中。
mapperB具有結果映射B,它包含與A(select語句findById)的關聯,並且也緩存在自己的命名空間中。
問題是:
mapperB.findById
(負載B和相關的 - 無論它緩存)mapperA.findById
(沒有選擇執行的是緩存)mapperA.update
(更新一些A - 高速緩存A變刷新)mapperA.findById
(選擇執行 - 加載A更新)mapperB.findById
- 這裏是問題 - 沒有執行選擇,b因爲B被緩存了。但它被A實例緩存。此實例不反映更新。應該執行select/cache lookup來加載當前的A實例。
我的問題是:
如何使當兩個結果被緩存協會才能正常工作。
注:
我知道我可以強制A和B映射器使用單一命名空間的緩存,所以當一個更新,將刷新所有緩存A和B的查詢。但考慮到我有10個實例 - 這些實例每隔幾分鐘就會更新一次。還有1千萬個B實例 - 這些實例每天都會更新一次。每次更新A都會沖洗所有B,效率不高。
你得到這方面的任何解決方案? – Sagar 2016-10-24 09:00:18
@Sagar我還沒有想出任何'神奇'的解決方案。但我學到的一個教訓是,有時不使用關聯並僅存儲引用對象的id更容易。然後你可以從緩存的DAO中查找這些對象。 – 2016-10-25 10:00:45