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
を使えないので、こちらのやり方が演繹的です。