If you're passing a Map, you've already lost it...in more ways than one. ;-)

Larry


On Sat, Dec 13, 2008 at 3:56 PM, Nathan Maves <[email protected]> wrote:
> sure you could do that put you lose a bit of type safety
>
> On Fri, Dec 12, 2008 at 4:08 PM, Larry Meadors <[email protected]> 
> wrote:
>> Actually...it's even easier.
>>
>> <update id="updateSector">
>>
>> No parameter class or map required.
>>
>> Larry
>>
>>
>> On Fri, Dec 12, 2008 at 12:12 PM, joeweder <[email protected]> wrote:
>>>
>>> You do not have to map a Map as a parameter. Just tell iBatis that the
>>> parameter is a map and use the key-names you used to populate it in your
>>> update (note: use parameterClass instead of parameterMap).
>>>
>>> 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);
>>>
>>> <update id="updateSector" parameterClass="map">
>>>        UPDATE SECTOR SET SECTOR_DESC = #description# WHERE SECTOR_ID = #id#
>>> </update>
>>>
>>> That's all there is to it.
>>>
>>>
>>> Alex Savitsky-2 wrote:
>>>>
>>>> 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
>>>>
>>>
>>> --
>>> View this message in context: 
>>> http://www.nabble.com/Trying-to-use-HashMap-as-a-param-object-for-an-UPDATE---getting-an-exception-tp20922966p20981745.html
>>> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>>>
>>>
>>
>

Reply via email to