Java Ibatis迭代列表

时间:2012-09-14 20:19:11

标签: ibatis loops

Java我正在使用ibatis

使用in子句想在子句中进行迭代,每个人都在谈论以下解决方案但是当我尝试它时会给我以下错误。

**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>

我病了,尝试尝试这个解决方案,但没有工作。任何帮助表示赞赏..

2 个答案:

答案 0 :(得分:1)

如果您观看ibatis文档,您将在第3.2.3.1章中找到CDATA的解释。转义XML符号。

由于您将SQL和XML组合在一个文档中,因此可能会发生冲突。最常见的冲突是大于和小于符号(&gt;&lt;)。 SQL语句将这些符号用作运算符,但它们是XML中的保留符号。一个简单的解决方案是“转义”在CDATA元素中使用XML保留符号的SQL语句。

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

答案 1 :(得分:0)

在论坛上阅读同样的问题后,我只删除了<![CDATA[并开始工作。

有人知道为什么会这样吗?请与我们其他人分享。