以下の内容はhttps://wrongwrong163377.hatenablog.com/entry/2018/12/26/125551より取得しました。


【JDBC】SimpleJdbcInsertでDEFAULTを設定したEnumのInsert時にcannot be nullと言われる状況への対処

wrongwrong163377.hatenablog.com
前回の記事がトラブっていた原因が判明したので書き直します。

原因

NOT NULLEnumカラムに対して値を指定しない場合、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を使えないので、こちらのやり方が演繹的です。




以上の内容はhttps://wrongwrong163377.hatenablog.com/entry/2018/12/26/125551より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14