この記事に書いたやり方でも動きますが、より演繹的な方法が有ったのでこちらもどうぞ。
wrongwrong163377.hatenablog.com
問題
SimpleJdbcInsert
でInsert時に、DDLでNOT NULLとDEFAULTを設定したカラムについてMapSqlParameterSource
に値を指定しなかった場合、com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column '[カラム名]' cannot be null
と言われます。
原因
テーブルの内指定していないカラムに関する値は全てNULLで埋められてしまうため、「NULLをInsertしようとする→NULLは設定できないのでエラー」となります。
対策
以下のように、usingColumns
を使って使うカラム名を初期化時に指定することで、問題が発生しなくなります。
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate) .withTableName("[テーブル名]") .usingColumns("[使うカラム名1], [使うカラム名2], [使うカラム名3], ...);