티스토리 뷰
Daylogs/Java
iBatis list parameter 로 iterate 구성 시 java.lang.StringIndexOutOfBoundsException
ohgyun 2010. 2. 10. 15:27
발생일: 2010.02.10
문제:
iBatis 에 parameterClass 로 List 를 넘긴 후,
iterate 태그 사용을 시도하였을 경우 아래와 같은 예외가 발생한다.
문제:
iBatis 에 parameterClass 로 List 를 넘긴 후,
iterate 태그 사용을 시도하였을 경우 아래와 같은 예외가 발생한다.
Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException
이 때 사용된 iBatis 구문은 아래와 같다.
<select id="selectSomething" parameterClass="list">
// select something and use iterate
<iterate property="someList">
#someList[]#
</iterate>
</select>
잘못된 게 없는 것 같은데, 왜 이럴까.
해결책:
정확한 원인은 모르겠으나, 일단 패러미터를 Map 형태로 전달해주면 문제 없이 작동한다.
queryForList 등의 메서드를 호출하기 전,
패러미터로 전달할 list 객체를 Map 객체로 감싼 후 전달하도록 한다.
<select id="selectSomething" parameterClass="map">
// select something and use iterate
<iterate property="someList">
#someList[]#
</iterate>
</select>
BUT, 아래 더 올바른 해결 방법이 있다.
=================================================================
# 추가. 2010.02.11
list 를 패러미터로 전달 시 iterate 태그에서 property 를 설정하면,
전달된 list 에서 해당 property 를 찾으려고 시도하는 것 같다.
<iterate> 태그에서 property 속성을 제거하면 정상적으로 작동한다.
<select id="selectSomething" parameterClass="list">
// select something and use iterate
<iterate> // iterate 태그 내 property 속성을 제거하라
#someList[]#
</iterate>
</select>
참고: iBatis: Support for Array or List Parameter with SQL IN Keyword
반응형
댓글
공지사항