我正在使用 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 不会自动生成值。
postgres 文档位于 http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL说“在 INSERT 中省略 SERIAL 列,或指定 DEFAULT 关键字”
如何配置 jooq 生成的 dao 以忽略此列或使用 DEFAULT 值
编辑 - 我正在使用 jooq 版本 3.3.2 和 postgres 8.4。 (最终目标是 aws redshift。因此在 postgres 8.4 上进行原型(prototype)设计)。
最佳答案
生成的 dao 无法正确处理默认值的问题已经存在于 jooq 的 github 问题列表中,如 https://github.com/jOOQ/jOOQ/issues/2700 .
在 3.4.0 中已修复。迁移到 3.4.0 解决了我的问题。
回答问题,以便其他人可以在需要时找到它。
关于java - 使用 jooq 在 postgres 中自动生成主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350446/