【发布时间】:2017-02-21 12:10:00
【问题描述】:
JOOQ 提供了非常好的功能来执行以下操作:
TableRecord tableRecord = dsl.newRecord(TABLE);
tableRecord.setSomeParam(...);
tableRecord.insert();
此时记录应该被插入到表中。
我们可以这样做:
tableRecord.getSomeParam(); // will return value above
但是,这个:
tableRecord.getId(); // NULL
总是返回null。这是设计使然吗?我们是否必须使用returning(TABLE.ID) 而不是Record 来获取自动生成的ID 值?如果在事务上下文中执行查询,这种行为会有所不同吗?
编辑:
我使用的是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) 你用的是什么数据库? 2) 你的桌子的 DDL 是什么?
-
您好,Eder 先生:我刚刚更新了问题,提供了您问题的答案。感谢您的宝贵时间!
-
有趣。这应该是开箱即用的,但我不能以这种方式重现它......你使用的是什么 jOOQ 版本?什么 JDBC 驱动程序和版本?你有没有通过 jOOQ 调试过,看看 jOOQ 是不是在某个地方走错了路?
-
澄清一下,你的意思是你不能重现问题描述中的错误行为吗?我已经用版本号更新了票证描述。我还没有尝试通过库进行调试 - 我会尽快尝试这样做。感谢您到目前为止的回复!
-
确实,我无法重现问题描述中的错误行为。我得到了我身边的那个 ID 值。无论如何,您是否考虑过升级您使用了 6 年的 PostgreSQL 驱动程序?