【问题标题】:Returning count of updated rows when UPserting to a Postgres table using jOOQ使用 jOOQ UPserting 到 Postgres 表时返回更新的行数
【发布时间】:2020-01-21 08:18:48
【问题描述】:

我正在使用 jOOQ 的 insertInto() 和 onDuplicateKeyUpdate() 方法将一些数据更新到 Postgres 表中。我以后想知道我的数据中有多少重复项,因此如果一行被插入或更新,则需要返回。

到目前为止,从我的 postgres 特定的research 来看,我发现RETURNING (not MY_TABLE.xmax = 0) AS updated 是一个有效的选项。但是,jOOQ 自动生成的 Java 表类似乎无法让我访问 postgres 的系统列,例如 xmax。

这是我目前的查询:

dsl.insertInto(MY_TABLE)
        .columns(
                // pkey columns
                MY_TABLE.SHIFT,
                MY_TABLE.DATE_UTC,
                MY_TABLE.TIME_UTC,

                MY_TABLE.DURATION,
        )
        .values(
                shiftId,
                utcDateId,
                utcTime,
                duration
        )
        .onDuplicateKeyUpdate()
        .set(MY_TABLE.DURATION, newDuration)
        .returning((MY_TABLE.xmax = 0).`às`("inserted"))
        .execute()

这会导致以下编译时错误:

错误:Kotlin:未解析的引用:XMAX

我已经重新检查了我的 Maven jOOQ 表生成配置,并且我没有排除任何列。我还通读了在 jOOQ 自己的网站上可以找到的所有内容,但没有找到针对此特定用例的有用信息。

关于我可以在这里做什么的任何提示?

【问题讨论】:

    标签: postgresql spring-boot kotlin jooq


    【解决方案1】:

    在这种情况下,您应该使用 jOOQ 的 SQL templating。具体看DSL.field()方法。像这样的东西:field("my_table.xmax", int.class).eq(0)。

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 2021-02-09
      • 2021-03-15
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2019-01-06
      相关资源
      最近更新 更多