我正在使用jooq生成的dao来对表执行创建操作。 该表有一个主键'id',类型为bigserial,默认约束为not null
CREATE TABLE public.book (
id bigserial NOT NULL,
author varchar(64)
CONSTRAINT book_primary PRIMARY KEY (id)
)
使用jooq创建记录我说
Book b = new Book();
b.setAuthor("Eric");
BookDao bd = new BookDao(jooqConfiguration);
bd.insert(b);
这会引发一个约束违规异常,即id为null。如果我设置了一个id,例如
Book b = new Book();
b.setId(25);
b.setAuthor("Eric");
BookDao bd = new BookDao(jooqConfiguration);
bd.insert(b);
我没有得到例外,但postgres不会自动生成值。
http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL上的postgres文档说“在INSERT中省略SERIAL列,或指定DEFAULT关键字”
如何配置jooq生成的dao以省略此列或使用DEFAULT值
编辑 - 我正在使用jooq版本3.3.2和postgres 8.4。 (最终的目标是红移。所以在postgres 8.4上进行原型设计。)
答案 0 :(得分:1)
这个生成的dao没有正确处理处理默认值的问题已经存在于jooq的github问题列表https://github.com/jOOQ/jOOQ/issues/2700中。
它在3.4.0中修复。迁移到3.4.0为我解决了这个问题。
回答这个问题,以便其他人可以在需要时找到它。