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)
)
附加信息:
- PostgreSQL 驱动程序:"postgresql:postgresql>9.1-901.jdbc4"
- JOOQ版本:
3.8.6
使用store()
方法(https://www.jooq.org/javadoc/3.2.0/org/jooq/UpdatableRecord.html#store())
自动生成的 ID 将在存储记录后刷新。
您也可以在 insert
之后调用 record.refresh()
,然后您的记录将包含刷新值。
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)
)
附加信息:
- PostgreSQL 驱动程序:"postgresql:postgresql>9.1-901.jdbc4"
- JOOQ版本:
3.8.6
使用store()
方法(https://www.jooq.org/javadoc/3.2.0/org/jooq/UpdatableRecord.html#store())
自动生成的 ID 将在存储记录后刷新。
您也可以在 insert
之后调用 record.refresh()
,然后您的记录将包含刷新值。