【问题标题】:returning a value with jOOQ and PostgreSQL serial and RETURNING使用 jOOQ 和 PostgreSQL 串行返回值并返回
【发布时间】:2014-05-28 16:07:36
【问题描述】:

我有一个带有串行(自动递增)uri_id 列和字符串 uri 列的 PostgreSQL uris 表。我可以使用 jOOQ 很好地查询表:

createDSLContext().select(fieldByName("uri_id")).from(tableByName("uris"))
    .where(fieldByName("uri").equal(uri.toString())).fetchOne(0, Integer.class))

这会返回一个 Java Integer。但是当我插入一个新的 URI 时,我想取回生成的 uri_id 键,所以我试试这个:

createDSLContext().insertInto(tableByName("uris"), fieldByName("uri"))
    .values(uri.toString()).returning(fieldByName("uri_id")).fetchOne().getValue(0, Integer.class)

这次我报错了:

Exception in thread "main" java.lang.IllegalArgumentException: Field 0 is not contained in list

作为测试,我尝试在 INSERT 语句中为 uri_id 提供文字值,但仍然出现错误。

看起来正在生成正确的 SQL:

insert into "uris" ("uri") values ('http://example.com/') returning "uri_id"

但是返回的记录是空的。即使我在插入语句中指定文字 uri_id 也是如此。

如何使用 jOOQ 从 PostgreSQL INSERT 语句中检索自动生成的列?

【问题讨论】:

    标签: java postgresql sql-insert jooq sql-returning


    【解决方案1】:

    jOOQ user group 上也正在详细讨论这个问题。

    基本上,您遇到了一个已知问题,即当与普通 SQL 而不是生成的表一起使用时,jOOQ 3.3(及更低版本)当前不支持 RETURNING 子句。这是问题参考:

    https://github.com/jOOQ/jOOQ/issues/2374

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2012-06-15
      • 2016-09-18
      相关资源
      最近更新 更多