今天用Ibatis的时候写了个简单的查询语句,如下:
- <select id="getAllBean" parameterClass="int" resultClass="TestBean">
- SELECT *
- FROM TEST_BEAN START WITH ID =#orgId#
- CONNECT BY PRIOR PARENTID = ID
- </select>
测试的时候报错了,错误信息如下:
- Caused by: java.lang.RuntimeException: Error setting property 'setParentId' of 'com.ai.educore.bean.TestBean@3450f068'. Cause: java.lang.IllegalArgumentException
- at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:52)
- at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:112)
- at com.ibatis.sqlmap.engine.mapping.result.ResultMap.setResultObjectValues(ResultMap.java:371)
- at com.ibatis.sqlmap.engine.mapping.result.AutoResultMap.setResultObjectValues(AutoResultMap.java:57)
- at com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java:64)
- at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:385)
- at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:300)
- at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:189)
- at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)
- at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)
- ... 65 more
- Caused by: java.lang.IllegalArgumentException
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
- at java.lang.reflect.Method.invoke(Unknown Source)
- at com.ibatis.common.beans.MethodInvoker.invoke(MethodInvoker.java:17)
- at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:46)
- ... 74 more
错误原因可能是数据库中parentId字段为空。
解决方法:把JavaBean中parentId类型改为基础类型的包装类,如int改为Integer。