--- The error occurred while applying a parameter map.
--- Check the T_CUSTOMER.selectCustomer-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: ORA-01861: Message 1861 not found; No message file for product=RDBMS, facility=ORA
; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the TBCSB_CUSTOMER.selectCustomerList-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: ORA-01861: Message 1861 not found; No message file for product=RDBMS, facility=ORA
[1/23/11 18:24:14:047 KST] 00000096 SystemErr R at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)
[1/23/11 18:24:14:047 KST] 00000096 SystemErr R at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
[1/23/11 18:24:14:047 KST] 00000096 SystemErr R at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
[1/23/11 18:24:14:047 KST] 00000096 SystemErr R at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203)
[1/23/11 18:24:14:047 KST] 00000096 SystemErr R at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:293) 작성자: JOAL 시간: 오후 6:29
CREATE
TABLE `catalog_query` ( `code` varchar(5) NOT NULL, `pk` varchar(20)
NOT NULL, `query` varchar(200) NOT NULL, `include` varchar(1000)
DEFAULT NULL, 어쩌구 저쩌구
이 select문을 수행하면, select된 값들을 (맨 위에 있는) resultMap을 통해서 VO 객체 변수에 매핑하게 된다. 위의 resultMap 설정에서 column attribute가 설정되어 있지 않은 code, pk, query 같은 녀석들은 property와 column이 동일하게 간주된다. csvInclude 처럼 column attribute를 설정해 주면, DB의 column명과 VO객체의 변수에 맞게 들어간다. 예를 들어 위의 csvInclude와 같은 경우, select 결과의 include column을 VO객체의 setcsvInclude() 메소드를 호출해서 setting한다.
자.. 여기까지는 괜찮다. 잘 된다. 그러던 중 테이블을 아래와 같이 바꿨다. "include_path"라는 column이 추가 됐다.
CREATE
TABLE `catalog_query` ( `code` varchar(5) NOT NULL, `pk` varchar(20)
NOT NULL, `query` varchar(200) NOT NULL, `include` varchar(1000)
DEFAULT NULL, `include_path` varchar(1000) DEFAULT
NULL, 어쩌구 저쩌구
이제 문제가 발생한다. 왜냐?? select문에 있는 "SELECT *" 때문에 select 해오는 column 개수가 1개 늘어났기 때문이다. resultMap을 봐도 새로 추가된 "include_path"는 매핑하는 방법이 안 써 있어서 오류가 발생한다. 우리는 select해와도 resultMap에 설정이 없기 때문에 버려질줄 알았는데 그렇지 않고 Exception을 발생시키다니..
2012-05-23
10:27:08,020 ERROR [test.MysqTest.loadAllData](110):error occured while inform
the instance com.ibatis.common.jdbc.exception.NestedSQLException: --- The
error occurred in ibatis/sql/query.xml. --- The error occurred while applying
a result map. --- Check the query.csvQueryResult. --- The error happened
while setting a property on the result object. --- Cause:
net.sf.cglib.beans.BulkBeanException at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204) at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithRowHandler(MappedStatement.java:149) at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryWithRowHandler(SqlMapExecutorDelegate.java:601) at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryWithRowHandler(SqlMapSessionImpl.java:156) at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryWithRowHandler(SqlMapClientImpl.java:132) at
test.MysqlTest.loadAllData(MysqlTest.java:70) Caused by:
net.sf.cglib.beans.BulkBeanException at
test.MysqlTest$$BulkBeanByCGLIB$$22ece2b4.setPropertyValues(<generated>) at
com.ibatis.sqlmap.engine.accessplan.EnhancedPropertyAccessPlan.setProperties(EnhancedPropertyAccessPlan.java:33) 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.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) ...
6 more Caused by: java.lang.NullPointerException ... 16
more
해결 방법은 2가지가 있다.
1. resultMap을 만들 때는 column명과 property명이 같더라도 항상 써준다.