Может быть, я упускаю что-то очевидное, но я не могу выполнить успешно выполненный простой оператор вставки.
Используя следующий интерфейс
public interface CustomItemMapper
{
Integer insert(CustomItem item, @Param("extra") String someparam);
}
и следующее сопоставление XML
<insert id="insert" useGeneratedKeys="false" parameterType="map" keyProperty="id">
insert into CustomItem (id, column2, column3, column4, column5, column6)
values (#{id}, #{field2}, #{field3}, #{field4}, #{field5}, #{extra})
</insert>
и этот код
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) servletContext.getAttribute("SqlSessionFactory");
SqlSession session = sqlSessionFactory.openSession();
try
{
CustomItemMapper mapper = session.getMapper(CustomItemMapper.class);
mapper.update(item);
session.commit();
}
finally
{
session.close();
}
Я получаю следующий отладочный вывод:
Checked out connection 368716606 from pool.
ooo Connection Opened
==> Executing: insert into CustomItem (id, column2, column3, column4, column5, column6) values (?, ?, ?, ?, ?, ?)
==> Parameters: null, null, null, null, null, actual_value_of_extra(String)
xxx Connection Closed
Returned connection 368716606 to pool.
, за которым следует исключение SQL (невозможно ввести ноль в столбец id
).
Таким образом, единственное значение, которое было передано правильно, - это дополнительная предоставленная строка.Я проверил, что имена полей являются правильными, и объект не является нулевым в этой точке, и поля заполнены правильно.
Я также попытался использовать parameterType="CustomItem"
вместо parameterType="map"
, но результат не изменился.
Буду признателен, если кто-нибудь сообщит мне, что мне здесь не хватает.
Заранее спасибо.
PS: Я тоже сталкиваюсь с той же проблемой с операторами вставки.