wrongwrong163377.hatenablog.com
前回の記事がトラブっていた原因が判明したので書き直します。
原因
NOT NULLなEnumカラムに対して値を指定しない場合、com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column '[カラム名]' cannot be nullになります。
詳細
テーブルの内指定していないカラムに関する値は全てNULLで埋められてしまうため、「NULLをInsertしようとする→NULLは設定できないのでエラー」となります。
前回の記事で書いた↑の内容は正しいです。
ただし、Enum以外(自分が見つけられなかったので他有るかは不明です)の場合勝手にデフォルトを使ってリトライするようで、問題は起きません。
対処
DEFAULTを使いたいカラム名をusingGeneratedKeyColumnsに設定すればOKです。
SimpleJdbcInsert jdbcInsert =
new SimpleJdbcInsert(jdbcTemplate)
.withTableName("[テーブル名]")
.usingGeneratedKeyColumns("[DEFAULTを使うカラム名]");
前回のやり方をしてしまうとBeanPropertySqlParameterSourceを使えないので、こちらのやり方が演繹的です。