글
카테고리 없음 2012. 8. 21. 12:06Check the result mapping for the 'NEXTVAL' property.
로컬 개발 환경에서는 잘 돌아가던게
리눅스 개발 서버에 올리니 이런 애러가 발생
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/xxx/yyy/ABCD.xml.
--- The error occurred while applying a result map.
--- Check the nextScopeNo-AutoResultMap.
--- Check the result mapping for the 'NEXTVAL' property.
--- Cause: java.lang.NullPointerException
... 생략
해당 소스를 찾아가 보니
DAO
protected String nextXXXXNo() throws SQLException {
return (String)sqlMapper.queryForObject("selectXXXXId");
}
Query Map
<select id="selectXXXXId" resultClass="string">
SELECT SEQ_XXXX.NEXTVAL FROM DUAL
</select>
이 부분이다.
일단 시간이 없어서 결과를 HashMap 으로 반환하고 DAO에서 HashMap에서 뽑아서 String로 캐스팅 하도록 변경해서 적용했는데...
Exception 을 자세히 살펴 보니 아래 부분에
Caused by: java.lang.NullPointerException
at oracle.sql.LnxLibThin.lnxnuc(LnxLibThin.java:5744)
at oracle.sql.NUMBER.toText(NUMBER.java:2664)
at oracle.jdbc.driver.OracleStatement.getStringValue(OracleStatement.java:3531)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:434)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1482)
NUMBER 타입을 String로 캐스팅 하다가 문제가 생긴것이 정확한 원인인 듯
아마도 로컬개발 환경과 개발서버의 환경이 Oracle JDBC 드라이버 차이인듯
두가지 해결 방법
Query Map의 resultClass 를 숫자 타입으로 바꾸거나
쿼리 자체에서 TO_CHAR로 문자로 바꾸어 버리거나.
예전 경험상 전자는 또 int로는 해결이 안되고 long나 BigDecimal 타입으로 사용 해야 하는 번거로움이 있어서
<select id="selectXXXXId" resultClass="string">
SELECT TO_CHAR(SEQ_XXXX.NEXTVAL) AS NEXT_ID FROM DUAL
</select>
이런 식으로 변경 적용 완료.
RECENT COMMENT