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

标签 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 不会自动生成值。

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/

相关文章:

java - 漂亮地登录 jooq

java - 如何使用 jOOQ 抽象模式?

java - 如何减少我的应用程序的CPU消耗

java - 在他们的新布局中,当您从视频页面转到用户个人资料页面时,youtube 如何保持 flash 视频播放?

c - 关于windows下使用PQconnectdb()连接pq服务器时的认证

postgresql - 为什么计划者没有利用我对子表的 CHECK CONSTRAINTS 来减小计划的大小?

postgresql - 如何在 PL/TCL 中访问 PostgreSQL 数组

java - 来自客户端的超时 web 服务调用

java - WAS 瘦客户端部署

java - Spring 嵌套事务不适用于 jOOQ