0

parameterType がjava.util.Set、またはその実装である場合、このパラメーターで foreach を実行すると がスローされjava.lang.UnsupportedOperationExceptionます。

<select id="selectList" parameterType="java.util.HashSet" resultMap="someMap">
    SELECT key FROM tb_my_table
    WHERE value IN (
        <foreach collection="set" item="item" separator=",">
        #{item}
        </foreach>
    )
</select>

mybatis3 内の原因は、メソッドをCollectionWrapper実装しておらずget、単に例外をスローすることです。
意図したデザインなのか、その理由が知りたいです。

4

1 に答える 1

3

ドキュメントには、セットの使用が可能であると記載されています。

任意の Iterable オブジェクト(List、Set など)、および任意の Map または Array オブジェクトをコレクション パラメーターとして foreach に渡すことができます。

Mybatis 3.2.7 で例外を再現できました。

しかし、Mybatis 3.3.0 では問題なく動作しています。

単一のパラメーターの予想される名前はcollectionであることに注意してください。

<select id="selectList" parameterType="java.util.HashSet" resultMap="someMap">
    SELECT key FROM tb_my_table
    WHERE value IN (
        <foreach collection="collection" item="item" separator=",">
        #{item}
        </foreach>
    )
</select>
于 2016-11-21T11:41:43.993 に答える