0

Java 我正在使用 ibatis

使用 in 子句想要在 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>

我生病了,并尝试尝试此解决方案,但没有奏效。任何帮助表示赞赏..

4

2 回答 2

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>
于 2012-09-18T14:02:41.997 回答
0

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

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

于 2012-09-18T12:51:11.410 回答