【问题标题】:autogenerated primary keys in postgres with jooq使用 jooq 在 postgres 中自动生成主键
【发布时间】: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)?
  • @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


【解决方案1】:

这个生成的 dao 不能正确处理默认值的问题已经出现在 jooq 的 github 问题列表中,为 https://github.com/jOOQ/jOOQ/issues/2700

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

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

【讨论】:

  • 你比我快 :-) 但我认为某处有问题,谢谢查找
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多