Я пытаюсь использовать функцию 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]
Вы уверены, что у вас нет какой-либо element.description, который не является нулевым? И почему вы «выбираете * из двойника»? – yalpertem
Я передаю все ненулевые значения в списке element.description. Что касается select * from dual, я действительно не уверен, почему мы должны это предоставить, но читаем где-то, что это должно следовать за инструкцией Insert all в Oracle. Его можно выбрать * из двойного или любого выбранного запроса из двойного. – nprak