mybatis 关联查询,其中一个关联表有数据更新,如何清理关联查询的缓存
1、select * from A ,对应AMapper.xml 这个数据被缓存了,若A表有更新,它的缓存也会被清掉,这是正常的。
2、select * from A inner join B A.b_id=B.id ,对应ABMapper.xml 若使用select语句,则相关数据也会被缓存。
问题来了,当A或B有更新的时候,只刷新了A或B表的缓存。此时并没有刷新ABMapper.xml中的关联查询的缓存。
所涉及的关键jar如下:
spymemcached-2.8.1.jar
mybatis-memcached-1.0.0-beta1-1210.jar
mybatis-3.1.1.jar
PS:
2个sql分别在不同的mapper.xml文件中。
每个mapper.xml都配置了
<cache eviction="LRU" type="org.mybatis.caches.memcached.MemcachedCache"/>
--------------------------------------------------------------------------------------------------------------
请问这个问题如何处理。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
我目前也在解决这个问题,思路:通过配置+mybatis plugin机制来解决,mybatis的更新时缓存粒度比较粗,想更细的话可以自已实现。
我知道的有两种办法:
1.如果ORM是xBatis或者jdbc,可以构建一个cache层,选择自己的缓存策略(本地缓存?分布式缓存?),尽在你的控制,只要缓存的粒度足够小,基本不会遇到你说的问题;
2.可以用Hibernate+ehCache,用的好性能据说也不错。
您上面说的“缓存策略”也同样会遇到我的这个问题。 现在使用hibernate的可能性不大,还是会选择mybatis。 即使用hubernate+ehCache我在猜想也可能会存在我刚才说的问题。
业务简单的话,是可以避免关联表的查询的。
用Mybatis就不要用关联了。我们早都不用关联了,用了出了问题都不知道从哪里找!!
支持下,不是听说用ibatis的人很多吗?不知道他们如何解决的?
1:更新删除操作的地方如需select,sqlSession.clearCache()下
2:尽量把他们放到一个mapper下
1:更新删除操作的地方如需select,sqlSession.clearCache()下
2:尽量把他们放到一个mapper下
http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有 不建议关联查询呵呵
我所知道的,目前没有很好的解决方案哦!呵呵 问问其他人
http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有 不建议关联查询呵呵
http://www.iteye.com/topic/1112064 这个问题 用插件 或者 自己手动清除 目前其他的办法 好像没有 不建议关联查询呵呵