Write/Problem&Solution

ibatis(mybatis)에서 HashMap을 이용한 동적인 쿼리문 반복 처리시

GNUNIX 2011. 11. 3. 18:18
ibatis(현 mybatis)에서 xml에 동적인 쿼리문으로 실행 할 수 있도록 만들었다.
resultClass를 HashMap으로 하여 List에 담아서 처리하도록 되어있다.
아니 그런데 한번은 실행이 잘 되는데 왜 두번째부터 계속 아래와 같은 에서 메세지가!!

--- The error occurred while applying a result map.   
--- Check the 쿼리ID - AutoResultMap.
--- Check the result mapping for the 컬럼명 property.   
--- Cause: java.sql.SQLException: 부적합한 열 이름

(...나머지 에러 메세지 생략)

원래 '부적합한 열 이름'이라고 한다면 DTO에 선언해준 변수명과 쿼리문에 적은 컬럼 이름이 일치 하지 않아서 생기는 에러이지만, 이부분은 너무 기본적인 부분이라 백번도 넘게 확인했는데 이번 문제는 분명 좀 다른것이 있었다.


결론은 ibatis의 특성인 dto mapping이 일정치 않아서 맞지 않다고 나오는것.
하지만 난 동적인 쿼리를 HashMap으로 List에 담기때문에 DTO를 사용하지도 않는데???

결론은 xml의 쿼리문 선언에 remapResults="true" 를 추가해 주어야한다.

<select id="selectDownData" parameterClass="excel" resultClass="java.util.HashMap" remapResults="true">

요렇게-

이유인 즉슨, 위 해당 쿼리가 실행될때 스 쿼리에 대한 정보를 그대로 가지고 있게 되는데 그 상태에서 쿼리만 바뀌다보니.. 안맞아서....
위 옵션은 정보를 캐시 하지 않도록 설정해주는 것이라고 합니다.

(예전에 한번 적었다가 뭐에 쓴느건지 몰라서 지웠더니.. 이것때문이었다니... ㅜㅠ)

참고 포스팅 :
http://ohgyun.com/280
http://kamkami.tistory.com/102