Обновление с использованием foreach и hashmap в mybatis

Я написал запрос в myBatis, как показано ниже. Проблема в приведенном ниже запросе заключается в следующем. Значение col3 — это последнее значение, вставленное в карту, которое передается в запрос. Это не значение для соответствующего ключа.

<update id="upd10"  parameterType="map">
 UPDATE TABLE_NAME SET col1 = #{col1_value}, col3= {item.value} WHERE 
 col2 IN 
    <foreach item="item" index="index" collection="dateMap.entrySet()" open="("        separator="," close=")">
        #{item.key}
    </foreach>
</update>

Мой сценарий, как показано ниже,

Если значение col2 совпадает с item.key в хэш-карте, которую я передаю в запрос, я хочу установить значение col3 в item.value.


person mike    schedule 04.03.2016    source источник
comment
Если исключение, которое вы получаете, связано с TypeHandler для значения, то ваше решение находится прямо здесь: stackoverflow.com/questions/35717551/   -  person Florian Schaetz    schedule 04.03.2016
comment
Спасибо, Флориан, мне удалось заставить работать запрос. Но теперь значение col3 не является значением ключа col2. Значение col2 является последним значением на карте.   -  person mike    schedule 04.03.2016
comment
Честно говоря, я удивлен, что вещь item.value вне foreach вообще работает. У вас есть предмет на карте? Лично я сомневаюсь, что ваш запрос когда-либо будет работать таким образом, поскольку значение, которое вам нужно в него вложить, зависит от того, какой элемент приводит к успеху в части IN, но у вас нет шансов узнать, какой именно. Я подозреваю, что вам нужно будет перебирать вашу карту вручную и делать это для каждой записи на вашей карте отдельно.   -  person Florian Schaetz    schedule 04.03.2016
comment
Что происходит, так это то, что он выбирает последнее вставленное значение на карте и присваивает его столбцу. Так что это не относится к item.key. Можно ли сделать так. Или, как вы говорите, нам нужно делать это ТОЛЬКО отдельно.   -  person mike    schedule 04.03.2016
comment
Пример: у вас есть записи на карте... (1,A), (2,B), (3,C). Нет, вы делаете такое обновление... UPDATE ...SET... = (A or B or C, depending...) WHEN ... IN (1,2,3). Как вы ожидаете, что MyBatis узнает, КАКОЕ значение использовать? Тест на IN будет выполняться в базе данных, и это только говорит вам, что подходит одно из этих трех значений, но не какое. Итак, эта конструкция никогда не может работать, так как у вас есть два уровня: MyBatis должен решить, какое значение использовать, но не может, так как только база данных знает, какой ключ был найден.   -  person Florian Schaetz    schedule 04.03.2016