2012-09-14 3 views
0

자바 난 솔루션을 다음과 같은 이야기, 절에 내부 반복 할 절에서 사용 iBATIS를마다 하나를자바 iBatis를 반복 처리 목록

를 사용하고 있지만 내가하려고 할 때이 오류 다음 날 수 있습니다.

**Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named '[]' in class 'java.util.List'** 


List entityIds = new ArrayList(2); 
     entityIds.add(42167777); 
     entityIds.add(43178455); 

(List<EventCategory>)sqlMapClient.queryForList("getEventCategoryByEntityIds", entityIds); 

<select id="getEventCategoryByEntityIds" parameterClass="java.util.List" resultMap="eventCategoryDetails"> 
    <![CDATA[ 
     SELECT E.EVENTCATEGORYID, ECAT.Name EVENTCATEGORYNAME, E.EVENTSUBCATEGORYID , ESUBCAT.Name EVENTSUBCATEGORYNAME FROM 
     Event E (nolock) 
     JOIN EVENTCATEGORY ECAT (nolock) ON E.EventCategoryId=ECAT.EventCategoryId JOIN EVENTCATEGORY ESUBCAT ON E.EVENTSUBCATEGORYID=ESUBCAT.EventCategoryId 
     <dynamic prepend="where ENTITYID in "> 
      <iterate open="(" close=")" conjunction=","> 
      #[]# 
      </iterate> 
     </dynamic> 
     ]]> 
    </select> 

나는이 솔루션을 사용해 보았지만 작동하지 않았습니다. 어떤 도움을 주셔서 감사합니다.

답변

0

포럼을 통해 같은 종류의 문제를 읽은 후, 나는 <![CDATA[만을 제거하고 작업을 시작했습니다.

왜 이런 일이 발생하는지 알고 있습니까? 나머지 우리와 공유하십시오.

+0

나는 CDATA 태그가 ibatis가 동적 SQL을 수행하는 것을 방해한다고 생각하십니까? –

1

ibatis doc을 보면 3.2.3.1 장의 CDATA 설명을 찾을 수 있습니다. XML 기호를 이스케이프 처리합니다.

SQL과 XML을 단일 문서로 결합하므로 충돌이 발생할 수 있습니다. 가장 일반적인 충돌은보다 큼 및보다 작은 기호 (> <)입니다. SQL 문은이 기호를 연산자로 사용하지만 XML의 예약 기호입니다. 간단한 해결책은 CDATA 요소 내에서 XML 예약 기호를 사용하는 SQL 문을 "이스케이프"하는 것입니다.

<statement 
    id="selectPersonsByAge" parameterClass=”int” resultClass="person"> 
    <![CDATA[ SELECT * FROM PERSON WHERE AGE > #value# ]]> 
</statement>