Il semble que JOOQ ignore complètement les valeurs par défaut des colonnes de la base de données. L'objet ActiveRecord n'est pas mis à jour et il ne saute pas cette colonne lors de l'INSERT. Au lieu de cela, il essaie de lui donner la valeur NULL, ce qui échoue avec les colonnes NOT NULL.
Exemple :
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
Le comportement que j'attendrais est que le newRecord() initialise toutes les variables par défaut avec les valeurs korrekt (bien que je comprenne que cela puisse être difficile si le résultat est le fruit d'une fonction personnalisée :-)) ou que l'INSERT INTO n'insère pas toutes les colonnes non modifiées avec les valeurs par défaut et que l'INSERT INTO soit suivi d'un SELECT qui récupère les valeurs existantes dans la base de données (similaire à un RETURNING).
S'agit-il vraiment d'un bogue ou d'une limitation, ou bien ai-je oublié une option de configuration, etc. qui permet d'utiliser des colonnes "not null default" ?