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

JOOQ getting an auto generated column value upon inserting it using the record, not returning

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

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

此时记录应该插入到table.

我们可以这样做:

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

然而,这:

tableRecord.getId(); // NULL

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


编辑:

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

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)
)

附加信息:

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

自动生成的 ID 将在存储记录后刷新。

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