반응형
IBATIS를 이용해서 동적으로 컬럼명을 사용할때 The column name is invalid 에러가 발생했습니다.
해당구문은 다음과 같았습니다.
SELECT
count(*) as qrtr_$rp_datatype$
FROM
tb_q_$rp_datatype$
WHERE RP_USER_CD = #rp_user_cd#
AND RP_YEAR = #rp_year#
AND RP_TERM = #rp_term#
GROUP BY RP_YEAR, RP_TERM, RP_USER_CD
딱봤을때는 전혀 이상이 없어보였고, 처음 실행시에는 오류도 나지 않았습니다.
하지만 이상하게 두번째 실행할때부터는 에러가 발생합니다...
WAS재기동 후 실행하면 또 처음엔 잘되는데, 두번째는 에러가 발생했습니다.
도대체 어디가 잘못된건지... 문제를 해결하기 위해 구글링을 해봤습니다.
IBATIS는 특정 id의 쿼리를 실행한 후 해당 id의 쿼리를 캐쉬로 보관하고 있다가 동일한 id에 대한 요청이 발생하면
캐쉬에 저장된 쿼리정보를 토대로 result값을 맵핑 시킨다고 합니다.
해결방법은 간단했습니다. 속성에 remapResults="true"를 추가해주면 됩니다.
false가 디폴트값이기 때문에, 캐쉬에 요청한 id가 저장돼있으면 캐쉬값으로 맵핑 시도를 해서 에러가 발생한것입니다.
이를 true로 바꿔줌으로써 캐쉬의 내용을 무시하고 현재의 값을 가지고 맵핑을 시켜줍니다.
다음과 같이 적용하면 됩니다.
<select id="NpensionDAO.selectExcelStatus" remapResults="true" parameterClass="NpensionVO" resultClass="NpensionVO" >
SELECT
count(*) as qrtr_$rp_datatype$
FROM
tb_q_$rp_datatype$
WHERE RP_USER_CD = #rp_user_cd#
AND RP_YEAR = #rp_year#
AND RP_TERM = #rp_term#
GROUP BY RP_YEAR, RP_TERM, RP_USER_CD
</select>
반응형
'개발 > DATABASE' 카테고리의 다른 글
[Oracle] 오라클 계정 비밀번호 찾기 (0) | 2023.08.30 |
---|---|
[MySQL] 외래 키 제약조건(Foreign Key Constraint) 끄기 (0) | 2023.02.09 |
[MySQL] 사용자 생성/DB생성/권한부여 (0) | 2022.12.24 |
[MariaDB] MacOS에서 MariaDB설치하기 (1) | 2022.12.24 |
[MySQL] Trigger(트리거) 사용하기 (0) | 2020.03.25 |