JOOQ はデータベース列のデフォルト値を完全に無視しているようです。ActiveRecord オブジェクトを更新することも、INSERT でこの列をスキップすることもありません。代わりに、NOT NULL 列で失敗する NULL に設定しようとします。
例:
CREATE TABLE bug (
foo int,
bar int not null default 42
);
BugRecord b = jooq.newRecord(BUG);
b.setFoo(3);
b.store();
assertNotNull(b.getBar()); // fails
Record r = jooq.select().from(BUG).fetchOne();
assertEquals(new Integer(-1), r.getValue(BUG.BAR)); // fails
// DataMapper pattern
Bug b = new Bug();
b.setFoo(3);
bugDao.insert(b); // Fails because it tries to set "bar" to NULL
私が期待する動作は、newRecord() がすべてのデフォルト変数を korrekt 値で初期化することです (ただし、結果がカスタム関数の結果である場合、これが難しいことは理解しています :-)) または INSERT INTO が行うことです。変更されていないすべての列をデフォルト値で挿入するのではなく、INSERT INTO の後にデータベースから既存の値をフェッチする SELECT が続きます (RETURNING と同様)。
これは本当にバグ/制限ですか、それとも「デフォルトではない」列を使用できるようにする構成オプションなどがありませんか?