使用 jOOQ UPserting 到 Postgres 表时返回更新的行数
Posted
技术标签:
【中文标题】使用 jOOQ UPserting 到 Postgres 表时返回更新的行数【英文标题】:Returning count of updated rows when UPserting to a Postgres table using jOOQ 【发布时间】: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 自己的网站上可以找到的所有内容,但没有找到针对此特定用例的有用信息。
关于我可以在这里做什么的任何提示?
【问题讨论】:
【参考方案1】:在这种情况下,您应该使用 jOOQ 的 SQL templating。具体看DSL.field()
方法。像这样的东西:field("my_table.xmax", int.class).eq(0)
。
【讨论】:
以上是关于使用 jOOQ UPserting 到 Postgres 表时返回更新的行数的主要内容,如果未能解决你的问题,请参考以下文章