问题描述
我们在使用ibatis时,有时候会把sql的返回值类型设置为HashMap,在极少数情况下会出现映射问题。
异常为NestedSQLException或者sQLException,或者类似The error occurred while applying a result map的提示。我遇到过的出现这种问题的情况都是sql的返回列是动态的,两次查询返回列不一致就会出现问题
原因分析
原因上应该是ibatis自身的缓存机制导致的,并不会每次查询都创建新的HashMap,就导致了第二次查询的返回列无法与上一个Map匹配。
问题处理
在sql文件中,我们可以在这种会返回不固定列的sql标签上添加属性,remapResults="true"就可以解决了。