使用jooq在postgres中自动生成主键

时间:2014-06-22 10:44:19

标签: java postgresql jooq

我正在使用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上进行原型设计。)

1 个答案:

答案 0 :(得分:1)

这个生成的dao没有正确处理处理默认值的问题已经存在于jooq的github问题列表https://github.com/jOOQ/jOOQ/issues/2700中。

它在3.4.0中修复。迁移到3.4.0为我解决了这个问题。

回答这个问题,以便其他人可以在需要时找到它。