ibatis出现AutoResultMap错误的问题
来源:互联网 发布:黑马c语言视频云盘 编辑:程序博客网 时间:2024/05/18 15:07
为了能够让ibatis动态执行传入的sql,我只在ibstis配置文件里配置了一个查询语句,配置如下:
<select id="queryObjectForSql" resultClass="java.util.HashMap"
parameterClass="java.lang.String">
$sql$
</select>
传入SQL:
select substr(t.form_id,2) as ACTIVITYID from swfformtablemgr t where t.form_id like 'F'||'50012%'
这莫名其妙出现如下错误:
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/sitech/ismp/prealarm/maps/sendPreAlarm.xml.
--- The error occurred while applying a result map.
--- Check the queryObjectForSql-AutoResultMap.
--- Check the result mapping for the 'PROCESSID' property.
--- Cause: java.sql.SQLException: 列名无效
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:94)
at com.sitech.ismp.prealarm.dao.impl.SendPreAlarmDaoImpl.queryObjectForSql(SendPreAlarmDaoImpl.java:34)
at com.sitech.ismp.prealarm.service.impl.SendPreAlarmServiceImpl.queryObjectForSql(SendPreAlarmServiceImpl.java:27)
at com.sitech.ismp.prealarm.util.ScanedTaskAndSendPreAlarm.SendPreAlarm(ScanedTaskAndSendPreAlarm.java:51)
查找半天无果,将sql直接放到数据库执行没有任何错误,执行的sql中并没有PROCESSID字段,为何会报列明无效错误,极度郁闷。。。
后来才知道由于sql是动态传入的,每次执行的语句可能会不同,查询的结果也会不同,而ibatis为了避免经常的对返回的结果进行内省,ibatis会记录上一次查询结果的元数据, ibatis会在每次查询的时候内省查询结果来设置元数据,来保证返回恰当的结果。在 【statement】, 【select】, 和【procedure】 标签中存在一个可选的属性【remapResults】,默认值是false.如果每次查询的列不定的话,这个属性需要设置为true.
更在:
<select id="queryObjectForSql" resultClass="java.util.HashMap" remapResults="true"
parameterClass="java.lang.String">
$sql$
</select>
OK,问题解决。不过remapResults属性会造成一定的性能损失,所以要谨慎使用,只在你需要的时候使用--查询列发生变化时
- ibatis出现AutoResultMap错误的问题
- 关于ibatis出现AutoResultMap错误的问题
- 关于ibatis出现AutoResultMap错误的问题
- iBatis的AutoResultMap 默认配置使用时候出现的问题
- iBatis的AutoResultMap 默认配置使用时候出现的问题
- AutoResultMap的问题
- 使用Ibatis,出现的错误
- Ibatis常出现的问题
- ibatis出现错误及解决办法
- ibatis 配置文件错误问题
- ibatis 出现的retrotranslator.runtime.java.lang.Enum_一个问题
- pageContext+ibatis+foreach 在分页查询中出现的问题
- pageContext+ibatis+foreach 在分页查询中出现的问题
- ibatis + spring 的错误
- Ibatis中XML注释错误引起的问题
- 总结的ibatis和spring整合时候出现的一些错误解决办法,更新中……
- ibatis与springmvc出现Check the result mapping for the 'xxx' property的错误
- 测试iBatis出现数据库Access denied问题
- Y450安装Ubuntu显卡驱动后屏幕分割成6块的解决办法
- 计算任意凸多边形内最大矩形
- openCv学习笔记(四)-数学形态学1(二值图像的膨胀、腐蚀、开运算和闭运算)
- android弹出窗口的实现(PopupWindow)
- if-else优化措施
- ibatis出现AutoResultMap错误的问题
- SWUN 1303 - 魔法学徒
- C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
- poj2195 Going Home
- C++虚函数与纯虚函数用法与区别
- Java那点儿事2——协变式返回值
- 第二天 时间编程
- 我的博客园
- 任意凸四边形内最大矩形