[ http://issues.apache.org/jira/browse/IBATIS-210?page=comments#action_12363051 ]
Reuben Firmin commented on IBATIS-210: -------------------------------------- Hello, an update on this. #status[].value# does in fact work; however, #status[]# does not. (The first works because the Deployment.Status Enum implements HasValue, which contains a getValue() method.) The second gives this stacktrace: java.lang.NullPointerException at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42) 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:176) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) at com.ibatis.sqlmap.engine.mapping.statement.CachingStatement.executeQueryForList(CachingStatement.java:100) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101) at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78) java.lang.NullPointerException at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42) 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:176) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) I also reproduced the bug using a map: <select id="testCaseForClinton" parameterClass="map" resultClass="long"> SELECT * FROM Deployment WHERE statusId=#status# </select> public void getIbatisBug210() { HashMap map = new HashMap(); map.put("status", Deployment.Status.BUILDING); getSqlMapClientTemplate().queryForObject("Deployment.testCaseForClinton", map); } public void testIbatisBug210() throws Exception { System.out.println("testing ibatis bug 210"); DeploymentDao dao = DeploymentDaoFactory.getDefault(); dao.getIbatisBug210(); fail("it works unexpectedly"); } With this (the latter being a junit test; the former part of the DeploymentDao), I get the same stacktrace: java.lang.NullPointerException at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42) 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:176) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:561) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:536) Again, I know you don't support enums, but wanted to clarify my previous comment. Thanks > Enum within Collection is not mapped to custom TypeHandler > ---------------------------------------------------------- > > Key: IBATIS-210 > URL: http://issues.apache.org/jira/browse/IBATIS-210 > Project: iBatis for Java > Type: Bug > Components: SQL Maps > Versions: 2.1.0 > Environment: Linux/Spring/Resin/Jdk1.5 > Reporter: Reuben Firmin > > Passing an Enum to Ibatis requires the declaration of a custom TypeHandler > (see my comments here for my implementation: > http://opensource2.atlassian.com/confluence/oss/display/IBATIS/How%20do%20I%20use%20a%20Custom%20Type%20Handler%20with%20complex%20property%20or%20Type%20Safe%20Enumeration) > This works, except when the Enum is within a map or a list. > That is, if I pass a list of Enum attributes to a statement, as a parameter, > and attempt to iterate over them, they are mapped to UnknownTypeHandler. > Similarly, when an Enum is passed as value in a HashMap as part of a > parameter, it is also mapped to an UnknownTypeHandler. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira