Give this entry a try.

 <typeHandler javaType="java.util.GregorianCalendar" jdbcType="TIMESTAMP" 
callback="com.CalendarTypeHandler" />





"Petr V." <[email protected]> 
01/16/2009 12:03 PM
Please respond to
[email protected]


To
[email protected]
cc

Subject
Re: SQL Mapping is not working







Please bear with me, this is my first on hand on iBatis, I am coming from 
hibernate world :-(

Yeah Chris, I did it and I am still getting same exception. It simply does 
not find my callbackhandler.

====================================

<sqlMapConfig>

    <typeAlias type = "com.Teacher" alias = "Teacher"/>
    <typeHandler javaType="java.util.Calendar" jdbcType="TIMESTAMP" 
callback="com.CalendarTypeHandler"/> 
    <sqlMap resource="maps/Teacher.xml" />

</sqlMapConfig>

================

Teacher.xml

<sqlMap>

    <resultMap id="teacherResult" class="Teacher">
        <result property="id"    column="ID"/> 
        <result property="name"  column="NAME"/> 
        <result property="dob"   column="DOB"  /> 
    </resultMap>

     <insert id="insertTeacher" parameterClass="Teacher">
        INSERT INTO Teacher (id, name , dob ) VALUES (#id#, #name# , 
#dob#)
    </insert>

</sqlMap>

================================================

Java Code that inserts 

Teacher t = new Teacher();
t.setId(135);
t.setName("FromTest");
t.setDob(Calendar.getInstance());
getSqlMapClientTemplate().update("insertTeacher", t);

================================================

Complete Exception Trace


org.springframework.jdbc.UncategorizedSQLException: SqlMapClient 
operation; uncategorized SQLException for SQL []; SQL state [null]; error 
code [0]; 
--- The error occurred in maps/Teacher.xml. 
--- The error occurred while applying a parameter map. 
--- Check the insertTeacher-InlineParameterMap. 
--- Check the parameter mapping for the 'dob' property. 
--- Cause: java.lang.NullPointerException; nested exception is 
com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in maps/Teacher.xml. 
--- The error occurred while applying a parameter map. 
--- Check the insertTeacher-InlineParameterMap. 
--- Check the parameter mapping for the 'dob' property. 
--- Cause: java.lang.NullPointerException
    at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at 
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
    at 
org.springframework.orm.ibatis.SqlMapClientTemplate.update(SqlMapClientTemplate.java:411)
    at com.TeacherDaoImpl.insertTeacher(TeacherDaoImpl.java:14)
    at com.SampleManager.insertTeacher(SampleManager.java:28)
    at com.ManagerTest.testInsertTeacher(ManagerTest.java:42)
    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:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at 
org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at 
org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
    at 
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
    at 
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
    at 
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    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:597)
    at 
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
    at 
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in maps/Teacher.xml. 
--- The error occurred while applying a parameter map. 
--- Check the insertTeacher-InlineParameterMap. 
--- Check the parameter mapping for the 'dob' property. 
--- Cause: java.lang.NullPointerException
    at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:110)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
    at 
org.springframework.orm.ibatis.SqlMapClientTemplate$10.doInSqlMapClient(SqlMapClientTemplate.java:413)
    at 
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
    ... 28 more
Caused by: java.lang.NullPointerException
    at 
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameter(ParameterMap.java:166)
    at 
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameters(ParameterMap.java:126)
    at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:78)
    at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
    at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
    ... 32 more

Thanks,

Petr


--- On Sat, 1/17/09, [email protected] 
<[email protected]> wrote:
From: [email protected] <[email protected]>
Subject: Re: SQL Mapping is not working
To: [email protected]
Date: Saturday, January 17, 2009, 12:19 AM


Make certain you register your type handler in you SQL Map Config file, 
similar to as follows: 

  <typeHandler javaType="java.util.Calendar" jdbcType="TIMESTAMP" 
callback="your.CalendarTypeHandlerCallback" /> 

Chris Mathrusse
[email protected]
Sybase, Inc
One Sybase Drive
Dublin, CA 94568
(925) 236-5553 



"Petr V." <[email protected]> 
01/16/2009 11:14 AM 

Please respond to
[email protected]



To
[email protected] 
cc

Subject
Re: SQL Mapping is not working









I believe that my type handler is not getting called any time though I am 
registering it. Can some one please have a look at code. I googled it and 
it should work :-(

==============================================================
This is my SQL Map

<sqlMap namespace="MTeacher">
 
   <typeAlias type = "com.Teacher" alias = "Teacher"/> 

   <resultMap id="teacherResult" class="Teacher">
       <result property="id"    column="ID"/> 
       <result property="dob"   column="DOB" 
typeHandler="com.CalendarTypeHandler" jdbcType="TIMESTAMP"/> 
   </resultMap>

 
   <insert id="insertTeacher11">
       INSERT INTO Teacher (id,  dob ) VALUES (#id#, #dob#)
   </insert>

</sqlMap>

========================================================

Exception Log is (It is calling UnknownTypeHandler.setParameter instead of 
my TypeHandler)

------------------------------------------------------------------------------

Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in maps/Teacher.xml. 
--- The error occurred while applying a parameter map. 
--- Check the insertTeacher11-InlineParameterMap. 
--- Check the parameter mapping for the 'dob' property. 
--- Cause: java.lang.NullPointerException
   at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:110)
   at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
   at 
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
   at 
org.springframework.orm.ibatis.SqlMapClientTemplate$10.doInSqlMapClient(SqlMapClientTemplate.java:413)
   at 
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
   ... 28 more
Caused by: java.lang.NullPointerException
   at 
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
   at 
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameter(ParameterMap.java:166)
   at 
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameters(ParameterMap.java:126)
   at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:78)
   at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
   at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
   ... 32 more

Thanks,

Petr

--- On Fri, 1/16/09, Ingmar Lötzsch <[email protected]> wrote: 
From: Ingmar Lötzsch <[email protected]>
Subject: Re: SQL Mapping is not working
To: [email protected]
Date: Friday, January 16, 2009, 1:58 PM

Petr V. schrieb:
> Any idea what is going on  ? :-( It
is straight forward code
> 
> ==================================================
> 
> <resultMap class="Job" id="JobResult">
> 
>     <result column="JOB_ID" jdbcType="INTEGER"
property="jobId" />
>     <result column="STATUS" jdbcType="INTEGER"
javaType="JobStatusEnum" 
>              property="jobStatus"
> typeHandler="JobStatusEnumTypeHandlerCallback"/>
> 
> </resultMap>
> 
> ==========================================
> 
> TypeHandler is
> 
> public class JobStatusEnumTypeHandlerCallback implements
> TypeHandlerCallback  {
> 
>     /**
>      *
>      * @param getter
>      * @return
>      * @throws SQLException
>      */
>     public Object getResult(ResultGetter getter) throws SQLException { 
> 
>         Integer intStatus = getter.getInt();

>         JobStatusEnum status = null; 
> 
>         if (intStatus != null) { 
>             status = JobStatusEnum.convert(intStatus);
>         } 
> 
>        return status; 
>     } 
> 
>     /**
>      *
>      * @param setter
>      * @param parameter
>      * @throws SQLException
>      */
>     public void setParameter(ParameterSetter setter, Object parameter)
> throws SQLException { 
>         JobStatusEnum status = (JobStatusEnum) parameter; 
>         Integer intStatus = new Integer(status.toIntValue()); 
>         setter.setInt(intStatus); 
>     } 
> 
>     /**
>      *
>      * @param s
>      * @return
>      */
>     public Object valueOf(String s) { 
>         return s; 
>     } 
> 
> ============================================
>

> Executing Code
> 
> Job job = new Job();
> job.setId(20);
> job.setStatus(JobStatusEnum.OK);
> 
> ============================================
> 
> Exception Log is
> 
> Caused by: org.firebirdsql.jdbc.field.TypeConvertionException: Error
> converting to int. OK
>     at
>
org.firebirdsql.jdbc.field.FBIntegerField.setString(FBIntegerField.java:124)
>     at
>
org.firebirdsql.jdbc.AbstractPreparedStatement.setString(AbstractPreparedStatement.java:402)
>     at
>
org.apache.commons.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:132)
>     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:597)
>     at
>
com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:70)
>     at $Proxy1.setString(Unknown Source)
>     at
>
com.ibatis.sqlmap.engine.type.EnumTypeHandler.setParameter(EnumTypeHandler.java:36)
>     at
>
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameter(ParameterMap.java:166)
>     at
>
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameters(ParameterMap.java:126)
>     at
>
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:78)
>     at
>
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
> 
at
>
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
>     ... 31 more

Have you verified that setParameter() of your type handler is called?
Seems that EnumTypeHandler is used instead.
>
com.ibatis.sqlmap.engine.type.EnumTypeHandler.setParameter(EnumTypeHandler.java:36)



Reply via email to