개발/DATABASE

[IBATIS] The column name is invalid 에러해결

독코더 2023. 8. 3. 14:37
반응형

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>

 

 

반응형