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>
我病了,尝试尝试这个解决方案,但没有工作。任何帮助表示赞赏..
答案 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[
并开始工作。
有人知道为什么会这样吗?请与我们其他人分享。