2012-09-14 43 views
0

的Java我使用ibatis的的Java 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文檔,您將在章節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>