【发布时间】:2013-08-19 01:02:35
【问题描述】:
JOOQ 似乎完全忽略了数据库列的默认值。既不会更新 ActiveRecord 对象,也不会在 INSERT 上跳过此列。相反,它尝试将其设置为 NULL,但在 NOT 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)。
这真的是一个错误/限制还是我错过了一些配置选项等 可以使用“not null default”列吗?
【问题讨论】:
标签: java sql default-value jooq