Gareth,
I'm
not completely sure how Ibatis handles this internally, but my guess is that
because your resultClass is a HashMap and it takes Objects (not Strings
specifically), the handler is not getting called. If you think about it,
the HashMap could contain Integers depending on what your sql returns.
Possibly, the type check for determing if a type handler should be called is
occuring before any type conversions for populating the
HashMap.
Hope
I've been helpful.
-Jonathan
-----Original Message-----
From: Gareth Moorst [mailto:[EMAIL PROTECTED]
Sent: Friday, January 13, 2006 9:31 AM
To: [email protected]
Subject: Custom Type Handler problemsI seem to be having problems with a global type handler (specified in my sqlmap-config.xml) not being called when I don't specifically set the java type or type handler in a resultmap.
For instance, say I have the following in an sql map:
<select id="getTariffCodes" resultClass="java.util.HashMap">
select tar_code, tar_description from tariffs
</select>
and the following type handler set in my global config file:
<typeHandler javaType="java.lang.String" callback="com.phones4u.datamanagement.datamodel.ibatis.typehandler.StringTrimTypeHandler"/>
When I call the select, my global type handler is ignored even though the objects returned from the database are of type java.lang.String.
I can make it work if I add a resultmap as follows:
<resultMap class="java.util.HashMap" id="tariffCodeResult">
<result property="tar_code" javaType="string"/>
<result property="tar_description" javaType="string"/>
</resultMap>
So it's not really a showstopper, but it was unexpected - is iBatis supposed to work like this?
I'd like to be able to specify the Type Handler to use globally for all objects of a type without having to go through and alter all of my simple selects - is this possible?
Cheers,
Gareth Moorst
Yahoo! Messenger NEW - crystal clear PC to PC calling worldwide with voicemail
