DB2 -- JDBCがIdentity情報を...

を提供してくれません!

JDBCからオートインクメント情報を取得するには、
「select * from [table]」した結果ResultSetの
ResultSetMetaDataのisAutoIncrement()を利用します。

「identity always」だと、true
「identity by default」だと、false

になります。

「always」は明示的なPK指定のInsertができなくなるため、
テストデータの管理等で非常に煩雑になるため使いたくありません。
(SQLServerで思い知らされた人も多いかと思います)

なので「by default」を使いたいのですが、上記の通りなので、
DBFluteのIDアノテーションの自動設定が効かず、Insertで失敗します。
そこで、手動でIdentity情報を指定する必要があります。
実は既にDBFuteに手動Identity設定があります。それを使えばOK。

./dfprop/identityDefinitionMap.dfprop

map:{
    ; [tablename] = [identity column name]
    ; [tablename] = [identity column name]
    ; ...
}

どこにも書いてません。
遥か昔に自動設定機能を実装してから、この機能は要らないだろう
とドキュメントには書いてないのです。(よもやJDBCが情報をくれないとは)

JDBCドライバのバグなのかどうかは不明ですが、
とりあえずこういった現象があることと、その対策を
DBFluteDB2のユーザの方のためにここに記しておきます。
(DBFluteDB2のページにも書いておきます)

# Driver = db2jcc.jar
# Version = 3.50.152