2014-11-11 2 views
0

Я пытаюсь использовать функцию Mybatis foreach для вставки списка объектов в одну таблицу в базе данных Oracle.Несколько вложений Oracle Mybatis Spring с помощью Insert All

Например, у меня есть таблица «Test_A», которая имеет единственный нулевой VARCHAR-столбец «Описание».

Я передаю список строк методу mybatis, картограф которого указан ниже.

<insert id = "testMultipleInserts" parameterType="java.util.List"> 
    Insert All 
    <foreach collection="list" item="element" index="index"> 
     Into Test_A (Description) values (#{element.description}) 
    </foreach> 
    select * from dual 
</insert> 

Когда я взываю вышеупомянутый метод, он выводит следующий запрос в журнал

 Insert All Into Test_A (Description) values (?) Into Test_A (Description) values (?) Into Test_A (Description) values (?) select * from dual 

, который я надеюсь, что в правильном синтаксисе, как в Oracle диалекта (я выполнил из SQL Browser и это работает)

Но, кажется, есть проблема с чтением элементов списка из параметра List, предоставленного методу. Я получаю исключение, как указано ниже.

 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_element_0' not found. Available parameters are [list] 
+0

Вы уверены, что у вас нет какой-либо element.description, который не является нулевым? И почему вы «выбираете * из двойника»? – yalpertem

+0

Я передаю все ненулевые значения в списке element.description. Что касается select * from dual, я действительно не уверен, почему мы должны это предоставить, но читаем где-то, что это должно следовать за инструкцией Insert all в Oracle. Его можно выбрать * из двойного или любого выбранного запроса из двойного. – nprak

ответ

0

Я понятия не имею о запросе вы пытаетесь, но трассировка стека четко заявляет, что его проблема параметр изменения ParameterType от java.util.List к list

<insert id = "testMultipleInserts" parameterType="list"> 
    Insert All 
    <foreach collection="list" item="element" index="index"> 
     Into Test_A (Description) values (#{element.description}) 
    </foreach> 
    select * from dual 
</insert> 
Смежные вопросы