【问题标题】:JOOQ's insert...returning with PostgreSQL 10 and JOOQ 3.10?JOOQ 的插入...返回 PostgreSQL 10 和 JOOQ 3.10?
【发布时间】:2019-03-26 23:57:13
【问题描述】:

JOOQ 的 insert...return 似乎对生成的代码不起作用。

有一个similar 处理纯 SQL 的问题,但是我没有使用纯 SQL。

这是有问题的行:

public Integer add(MemberRecord member) {
// always returns 1
    return dslContext.insertInto(MEMBER).set(member).returning(MEMBER.ID).execute(); 
}        

成员表有一个序列号作为主键。 生成的查询是正确的,如果我手动执行它将返回由序列生成的 id。

 -- ID is not specified in values list
 insert into "member" ("name", ...) returning "member"."id"

数据库为 PostgreSQL 10,JOOQ 版本为 3.10.8。

我是不是在使用 JOOQ 做错了什么,或者这是一个问题,也许已经在一些较新的版本中修复了?

【问题讨论】:

    标签: java sql postgresql jooq postgresql-10


    【解决方案1】:

    execute() 将返回查询插入/更新/删除的行数。您需要调用fetch() 变体之一,例如fetchOne()

    Javadoc:

    【讨论】:

    • 哦,自我说明,开始阅读 JOOQs javadoc 而不是猜测。对我来说似乎有点不直观,我可以在返回时指定字段,然后再次需要使用 fetchOne().getId() 指定相同的字段
    • @John:这是一个历史性的 API 设计问题,在 jOOQ 3.11 到 github.com/jOOQ/jOOQ/issues/6715 中已部分修复。您可以使用returningResult,然后在调用fetchOne() 时会得到Record1<Integer> 或类似类型。不幸的是,使用 Java 泛型,InsertResultStep 类型的方法不可能知道它们只返回一列。
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 2014-05-28
    • 2015-11-16
    • 2014-05-26
    • 1970-01-01
    • 2011-12-28
    • 2019-09-18
    • 2014-12-02
    相关资源
    最近更新 更多