You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Jeff Butler <je...@gmail.com> on 2008/08/01 02:56:14 UTC
Re: Problem using SelectByExample with TypeHandlerCallback
Try this column override in your (i)abatorConfig:
<columnOverride column="LOCATION_TYPE" javaType="LocationType"
typeHandler="LocationTypeTypeHandler" />
This will cause (i)abator to generate code that explicitly calls the type
handler. I'm fairly certain this will solve the problem. Without this,
then we're possibly dealing with a limitation in iBATIS. The ByExample
dynamic SQL is very complex and I don't think iBATIS is able to do as much
runtime introspection to resolve the type handler as is needed here.
Jeff Butler
On Thu, Jul 31, 2008 at 11:10 AM, Doug Flex <do...@yahoo.com> wrote:
> Hi,
>
> I have a problem with Null Pointer Exception when trying to use
> SelectByExample with enum criteria.
>
> I have done the following to seek for answer but have no success yet.
> Please help!
>
> - google
> - looked through iBatis FAQ
> - looked through iBatis WIKI
> - looked thought iBatis mailing archive
>
> the code described below omits full package path for readability
> ------------------
> 1) I specified type conversion for a column in AbatorConfig.xml. This
> generated code with the
> VARCHAR mapped to Java enum LocationType correctly. The generated code was
> Java 5, Spring Dao style.
> <table tableName="LOCATION">
> <columnOverride column="LOCATION_TYPE" javaType="LocationType"/>
> </table>
>
> 2) I have a class that called LocationTypeTypeHandler which implement
> TypeHandlerCallback to map database VARCHAR to Java enum LocationType
>
> 3) I specified the usage of the callback in SQLMapConfig.xml as follows:
> <typeHandler javaType="LocationType"
> jdbcType="VARCHAR"
> callback="LocationTypeTypeHandler"/>
> 4) Most of the cases such as SelectByPrimimaryKey, insert, etc...seems to
> be working. So, I know that my enum type conversion using
> LocationTypeTypeHandler was configured and invoked correctly. The problem I
> ran into was when using SelectByExample with line d) below. If I commented
> out line d) then the query works ok.
>
> a) LocationExample example = new LocationExample();
> b) LocationExample.Criteria criteria = example.createCriteria();
> c) criteria.andLocationIdEqualTo(1);
> d) criteria.andLocationTypeEqualTo(LocationType.GENERAL);
> e) List<Location> result = locationDao.selectByExample(example);
>
> 5) The stack trace are shown below. Using the debugger, all the data looks
> to be valid, especially 'oredCriteria[0].criteriaWithSingleValue[1].value'
>
> Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
> --- The error occurred while applying a parameter map.
> --- Check the LOCATION.abatorgenerated_selectByExample-InlineParameterMap.
>
> --- Check the parameter mapping for the
> 'oredCriteria[0].criteriaWithSingleValue[1].value' property.
> --- Cause: java.lang.NullPointerException
> Caused by: java.lang.NullPointerException
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188)
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:614)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:588)
> at
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298)
> at
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
> ... 23 more
> Caused by: java.lang.NullPointerException
> at
> com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:70)
> 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.executeQuery(SqlExecutor.java:180)
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
> at
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
>
>
>