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 doc を見ると、CDATA の説明が 3.2.3.1 章にあります。XML シンボルのエスケープ。

SQL と XML を 1 つのドキュメントに結合しているため、競合が発生する可能性があります。最も一般的な競合は、大なり記号と小なり記号 (><) です。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 に答える