JOOQ在使用记录插入时获取自动生成的列值,而不是返回

时间:2017-02-21 12:10:00

标签: java sql jooq

JOOQ提供了执行以下操作的非常好的能力:

TableRecord tableRecord = dsl.newRecord(TABLE);
tableRecord.setSomeParam(...);
tableRecord.insert();

此时应将记录插入表格中。

我们可以做类似的事情:

tableRecord.getSomeParam(); // will return value above

但是,这个:

tableRecord.getId(); // NULL

始终返回null。这是设计的吗?我们是否必须使用returning(TABLE.ID)来获取自动生成的ID值而不是Record?如果在事务上下文中执行查询,这种行为会不同吗?

编辑:

我正在使用PostgreSQL 9.4.10,我的表定义类似于以下内容:

CREATE TABLE item
(
    id bigserial NOT NULL,       
    name character varying(245),
    some_uuid uuid NOT NULL DEFAULT uuid_generate_v4(),
    CONSTRAINT item_pkey PRIMARY KEY (id),
    CONSTRAINT item_item_uuid_key UNIQUE (item_uuid)
)

其他信息:

  • PostgreSQL驱动程序:“postgresql:postgresql> 9.1-901.jdbc4”
  • JOOQ版本:3.8.6

1 个答案:

答案 0 :(得分:2)

使用store()方法(https://www.jooq.org/javadoc/3.2.0/org/jooq/UpdatableRecord.html#store()

存储记录后,将自动生成自动生成的ID。

您也可以在record.refresh()之后致电insert,然后您的记录将包含刷新的值。