Java JOOQ在使用记录插入时获取自动生成的列值,而不是返回
JOOQ提供了非常好的功能,可以执行以下操作:Java JOOQ在使用记录插入时获取自动生成的列值,而不是返回,java,sql,jooq,Java,Sql,Jooq,JOOQ提供了非常好的功能,可以执行以下操作: TableRecord tableRecord = dsl.newRecord(TABLE); tableRecord.setSomeParam(...); tableRecord.insert(); CREATE TABLE item ( id bigserial NOT NULL, name character varying(245), some_uuid uuid NOT NULL DEFAULT u
TableRecord tableRecord = dsl.newRecord(TABLE);
tableRecord.setSomeParam(...);
tableRecord.insert();
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)
)
此时,应将记录插入表中
我们可以这样做:
tableRecord.getSomeParam(); // will return value above
然而,这:
tableRecord.getId(); // NULL
始终返回null
。这是故意的吗?我们是否必须使用返回(TABLE.ID)
来获取自动生成的ID值,而不是记录
?如果在事务上下文中执行查询,这种行为是否不同
编辑: 我使用的是PostgreSQL 9.4.10,我的表定义类似于以下内容:
TableRecord tableRecord = dsl.newRecord(TABLE);
tableRecord.setSomeParam(...);
tableRecord.insert();
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()
方法()
存储记录后,将刷新自动生成的ID
您也可以在插入后调用record.refresh()
,那么您的记录将包含刷新的值。使用store()
方法()
存储记录后,将刷新自动生成的ID
您也可以在插入后调用
record.refresh()
,那么您的记录将包含刷新的值。1)您使用的是什么数据库?2) 你们桌子的DDL是多少?你好,埃德尔先生:我刚刚用你们问题的答案更新了这个问题。谢谢你的时间!有趣。这应该是开箱即用的,但我不能用这种方式复制它。。。您使用的是什么jOOQ版本?什么JDBC驱动程序和版本?您是否通过jOOQ进行调试以查看jOOQ是否在某个地方出现了错误的转向?澄清一下,您的意思是您不能在问题描述中重现错误的行为?我已经用版本号更新了票据说明。我还没有尝试过通过库进行调试-我会尽快尝试这样做。感谢您到目前为止的回复!事实上,我无法重现问题描述中的错误行为。我得到了我这边的ID值。不管怎样,您是否考虑过升级您6年的PostgreSQL驱动程序?1)您使用的是什么数据库?2) 你们桌子的DDL是多少?你好,埃德尔先生:我刚刚用你们问题的答案更新了这个问题。谢谢你的时间!有趣。这应该是开箱即用的,但我不能用这种方式复制它。。。您使用的是什么jOOQ版本?什么JDBC驱动程序和版本?您是否通过jOOQ进行调试以查看jOOQ是否在某个地方出现了错误的转向?澄清一下,您的意思是您不能在问题描述中重现错误的行为?我已经用版本号更新了票据说明。我还没有尝试过通过库进行调试-我会尽快尝试这样做。感谢您到目前为止的回复!事实上,我无法重现问题描述中的错误行为。我得到了我这边的ID值。不管怎样,您是否考虑过升级您6年的PostgreSQL驱动程序?