2016-11-21 6 views
0

Если параметрType равен java.util.Set, или его реализация, делая foreach с этим параметром throw java.lang.UnsupportedOperationException.Почему mybatis3 не поддерживает Set foreach?

<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 и просто генерирует исключение.
Я хочу знать, предназначен ли он для дизайна и причины.

+0

ли вы опубликовать исключение в деталях? – Blank

+0

@Forward All - это 'UnsupportedOperationException'. Посмотрите на CollectionWrapper mybatis, если хотите. – NaHeon

ответ

1

The documentation состояний, используя наборы можно:

Вы можете пройти любой Iterable объект (например, List, Set и т.д.), а также любой карты или массив объекта Foreach, как параметр сбора.

Я могу воспроизвести исключение с Mybatis 3.2.7.

Но он отлично работает с Mybatis 3.3.0.

Обратите внимание, что Ожидаемое имя для одного параметра коллекция:

<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> 
+0

Я попробовал mybatis 3.4.0 и проверил, что он работает. Пустая реализация CollectionWrapper не является проблемой. :) – NaHeon