Hi,
I'm trying to execute an update, with a HashMap for parameter (there's no
business object to pass). The mapping file is as follows (iBATIS v.2.3.0.677)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Sector">
<resultMap class="java.util.HashMap" id="sector">
<result property="id" column="SECTOR_ID" javaType="java.lang.Integer" />
<result property="code" column="SECTOR_CD" />
<result property="description" column="SECTOR_DESC" />
<result property="fiscalYear" column="FISCAL_YR"
javaType="java.lang.Integer" />
</resultMap>
<parameterMap class="java.util.HashMap" id="sector">
<parameter property="id" jdbcType="NUMERIC" />
<parameter property="code" jdbcType="VARCHAR" />
<parameter property="description" jdbcType="VARCHAR" />
<parameter property="fiscalYear" jdbcType="NUMERIC" />
</parameterMap>
<select id="getSectorList" resultMap="sector" parameterMap="sector">
SELECT * FROM SECTOR WHERE FISCAL_YR = #fiscalYear#
<isNotEmpty property="code">AND SECTOR_CD LIKE #code#||'%'</isNotEmpty>
<isNotEmpty property="description">AND SECTOR_DESC LIKE
#description#||'%'</isNotEmpty>
</select>
<update id="updateSector" parameterMap="sector">
UPDATE SECTOR SET SECTOR_DESC = #description# WHERE SECTOR_ID = #id#
</update>
</sqlMap>
Both parameters and results are Maps, and the select works when I pass it a
parameter map, whether it has all the properties, or not. Update, however,
fails:
Map s1 = new HashMap();
s1.put("code", "001");
s1.put("description", "Region Transaction upd");
s1.put("fiscalYear", "2005");
s1.put("id", "1501");
client.update("updateSector", s1);
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in ca/cihi/cmdb/model/Sector.xml.
--- The error occurred while applying a parameter map.
--- Check the Sector.sector.
--- Check the parameter mapping for the 'id' property.
--- Cause: java.sql.SQLException: Invalid column index
at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:91)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)
at
ca.cihi.cmdb.service.MaintenanceService.update(MaintenanceService.java:52)
... 29 more
Caused by: java.sql.SQLException: Invalid column index
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at
oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:4754)
at
oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:4717)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:70)
at $Proxy2.setString(Unknown Source)
at
com.ibatis.sqlmap.engine.type.StringTypeHandler.setParameter(StringTypeHandler.java:30)
at
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
at
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
at
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:79)
at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)
at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)
... 33 more
Am I doing something wrong?
Thanks,
Alex