블로그 이미지
빤따스뤽

Rss feed Tistory
카테고리 없음 2012. 8. 21. 12:06

Check 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>

이런 식으로 변경 적용 완료.

,
TOTAL TODAY