문제:
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
'프로그램 언어 > ibatis,mybatis' 카테고리의 다른 글
myBatis 한글깨짐 관련 조치자료 (0) | 2016.08.24 |
---|---|
mybatis byte[] array select/insert (1) | 2013.04.11 |
[펌] mybatis 버그!! ognl?? (0) | 2011.03.30 |
ibatis iterate 사용법 (1) | 2010.11.24 |
ibatis에서 insert했을 경우 리턴값 처리 (0) | 2010.02.19 |