You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Brian Sanders (JIRA)" <ib...@incubator.apache.org> on 2009/03/26 20:08:51 UTC

[jira] Commented: (IBATIS-568) Configured type handler not invoked on insert

    [ https://issues.apache.org/jira/browse/IBATIS-568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689607#action_12689607 ] 

Brian Sanders commented on IBATIS-568:
--------------------------------------

This has been a point of confusion for my team, as well.  If I have a typeHandler configured like:

    <typeHandler javaType="string" jdbcType="NVARCHAR" callback="foo.NVarcharTypeHandlerCallback"/>

and a procedure such as:

    <procedure id="test">
        {call MY_STORED_PROC(#in,javaType=string,jdbcType=NVARCHAR#)}
    </procedure>

I would expect that the typeHandler used would be my custom typeHandler, based on the specified javaType and jdbcType tokens.  However, my typeHandler is ignored.  I must explicitly include the "handler" token in any inline parameter.

InlineParameterMapParser.newParseMapping, around line 133, should be modified like:

    if (mapping.getTypeHandler() == null) {
      TypeHandler handler;
      if (parameterClass == null) {
        /* NEW */
        if (mapping.getJavaTypeName() != null) {
           handler = typeHandlerFactory.getTypeHandler(Resources.classForName(mapping.getJavaTypeName(), mapping.getJdbcTypeName());
        } else {
          handler = typeHandlerFactory.getUnkownTypeHandler();
        }
        /* end NEW */
      } else {
        handler = resolveTypeHandler(typeHandlerFactory, parameterClass, mapping.getPropertyName(), mapping.getJavaTypeName(), mapping.getJdbcTypeName());
      }
      mapping.setTypeHandler(handler);
    }

> Configured type handler not invoked on insert
> ---------------------------------------------
>
>                 Key: IBATIS-568
>                 URL: https://issues.apache.org/jira/browse/IBATIS-568
>             Project: iBatis for Java
>          Issue Type: Bug
>          Components: SQL Maps
>    Affects Versions: 2.3.3
>         Environment: Windows XP Professional
>            Reporter: Richard R. Duffy
>
> Custom type handler which is configured in the SqlMapConfig is not being invoked for an insert.  The configured handler is as follows:
> <typeHandler javaType="javax.xml.datatype.XMLGregorianCalendar" jdbcType="TIMESTAMP" callback="com.aac.engine.dao.impl.TimeStampHandler"/>
> The handler is called for queries (SELECT) and all TIMESTAMP data is processed through the handler.  However, the handler is not called on insert statements.
> Sample map file entry:
> <insert id="insertAllowance" parameterClass="Allowance">
>     INSERT INTO allowance
>     (
>       jobid,
>       createdate,
>       allowancereminderid,
>       allowancetype,
>       allowancecategory,
>       allowanceworkarea,
>       allowanceduedate,
>       allowancedescription,
>       allowancematerialamounttype,
>       allowancematerialamount,
>       allowancematerialunits,
>       allowancematerialunittype,
>       allowancelaboramount,
>       allowancelaborvisible
>       <dynamic>
>         <isPropertyAvailable property="selection">
>          ,selectiondescription,
>          selectionmaterialamount,
>          selectionlaboramount
>         </isPropertyAvailable>
>       </dynamic>
>     )
>     VALUES
>     (
>       #jobid#,
>       NOW(),
>       #reminderid#,
>       #type#,
>       #category#,
>       #workarea#,
>       #duedate#,
>       #description#,
>       #materialcalculation.type#,
>       #materialcalculation.typevalue#,
>       #materialunits#,
>       #materialunittype#,
>       #labortotal#,
>       #laborvisible#
>       <dynamic>
>         <isPropertyAvailable property="selection">
>          ,#selection.description#,
>          #selection.materialamount#,
>          #selection.laboramount#
>         </isPropertyAvailable>
>       </dynamic>
>     )
>     <selectKey type="post" resultClass="Integer">
>       SELECT LAST_INSERT_ID() AS value
>     </selectKey>
>   </insert>
> If I use an inline type handler for the date column (duedate) within the insert map (such as #private,handler=com.aac.engine.dao.impl.TimeStampHandler#) then it works fine.  
> Sample inline specification:  #duedate,handler=com.aac.engine.dao.impl.TimeStampHandler#,
> There was a similar issue reported for primitives (IBATIS-244) that was resolved in 2.3.3.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.