【发布时间】:2014-08-12 13:54:42
【问题描述】:
我正在使用 jooq 生成的 dao 对表进行创建操作。 该表有一个主键“id”,类型为 bigserial,默认约束不为空
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。 (最终目标是 aws redshift。所以在 postgres 8.4 上进行原型设计)。
【问题讨论】:
-
附注:您的链接不是“postgres 文档”。官方手册在这里:postgresql.org/docs/current/static/index.html
-
确定一下,您正在使用最新的 jOOQ 版本 (3.4.0)?
-
使用nextval(),查看手册:jooq.org/doc/3.4/manual-single-page/#sequences-and-serials
-
@FrankHeikens - 这意味着为每个创建的对象调用 2 次数据库,并且必须为多个对象执行此操作。有没有办法告诉 jooq db 会生成所需的值?
-
@LukasEder - 我正在使用 jooq 版本 3.3.2,这是 mvn 存储库和 postgres 8.4 上的最新版本。我应该迁移到 jooq 3.4.0 吗?最终目标是 aws redshift。所以在 postgres 8.4 上进行原型设计。
标签: java postgresql jooq