明らかな何かが欠けているのかもしれませんが、単純なマップされた挿入ステートメントを正常に実行できません。
次のインターフェースの使用
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.
id
その後に SQL 例外が続きます (列に null を入力することはできません)。
したがって、適切に渡された唯一の値は、追加で提供された文字列です。この時点で、フィールド名が正しく、オブジェクトが null ではなく、フィールドが適切に入力されていることを確認しました。
parameterType="CustomItem"
の代わりにも使ってみparameterType="map"
ましたが結果は変わりませんでした。
ここで何が欠けているのか誰かが教えてくれれば幸いです。
前もって感謝します。
PS:insert ステートメントでも同じ問題が発生します。