最近在做的项目中有一个消息功能,其中像系统消息的实现,就是在消息表中只有一条记录,然后对应每个用户要标记为删除或者已读,就在另一个表中用一条记录的标记。
这样设置删除或已读标记的时候,是在另一个表的 Mapper.xml 中操作的,也就不会更新消息表的缓存。
有人试图在ABMapper.xml 中采用cache-ref才解决这个问题,不好使。不知道是不是我配得不对。 ABMapper.xml中直接引用A以及B的命名空间, <cache-ref namespace="com.abcd.mapper.AMapper"/> <cache-ref namespace="com.abcd.mapper.BMapper"/>
解决方法:
1、对应的查询禁用缓存。
2、把更新B表的update的语句放到AMapper.xml中,这样的话在AMapper.xml做更新B的操作,也就会刷新A的缓存,这样再去select关联查询B表就可以查询到更新后的数据了。
但是这样仍有问题,就是B表的查询还是存在问题。
3、在应用层强制更新
消息表的数据没有任何改变,但我强制更新一下。这样对于查询比更新多得多的情况应该是比较合适的。
4、自定义缓存
具体实现就看你自己了,完全可以自己定义规则。
原文地址:https://blog.csdn.net/testcs_dn/article/details/89189128
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。