반응형
MyBatis로 개발하던 중 얻었던 '부적합한 열 인덱스'(Invalid column index) 오류에 대해 정리해본다.
TL;DR
- 변수에 대한 Getter, Setter가 올바르게 생성되었는지 확인
- 문자열이라고 따옴표를 사용했던 것은 아닌지 확인
- 주석에 변수를 포함한 것은 아닌지 확인
Getter, Setter
Java Bean으로부터 데이터를 가져오거나 반환할 때에는 Getter와 Setter를 이용합니다.
MyBatis가 호출할 Getter 메소드와 Setter 메소드가 존재하는지 확인합니다.
따옴표
보통 SQL에서 문자열을 다룰 때에는 작은 따옴표를 사용합니다.
혹시라도 나도 모르게 아래와 같이 SQL을 작성한 것은 아닌지 확인합니다.
SELECT '${userId}' AS USER_ID
FROM USER
따옴표 안에 변수를 삽입하는 경우 문자열로 취급되기 때문에 열 인덱스에 문제가 생깁니다.
주석
가장 최근에 겪었던 문제입니다.
SELECT USER_ID
, USER_PASSWORD
/* , ${password} AS NEW_PASSWORD */
FROM USER
위와 같이 주석 안에 변수가 있는 경우 해당 변수 역시 MyBatis가 처리해야 하는 변수로 인식되어 열 인덱스에 문제가 생깁니다.
아마 따옴표와 유사한 원인일 것으로 생각됩니다.
만약 SQL Mapper XML에 주석을 입력해야 하는 경우 <!-- 주석 -->
형태의 주석을 활용합니다.
반응형