如何在 jOOQ 中基于另一个时间列更新一个时间列

How to update one time column based on another in jOOQ

让我们假设一个超级简单的用例: 想象一下,我有一个包含这些列的 table (dummyTable):

id
dueAt
createdAt

如何使用 jOOQ 执行如下所示的批量更新

update dummyTable
set dueAt = TIMESTAMPADD(MINUTE, 5, createdAt) 
where ids in (...)

我在网上看到使用硬编码和提供的值的示例 - https://www.jooq.org/doc/3.13/manual/sql-building/column-expressions/datetime-functions/timestampadd-function/。但我无法弄清楚如何让 TIMESTAMPADD 函数与现有列值一起使用。

空白处应该填写什么?

return rwContext
        .update(DUMMYTABLE)
        .set(DUMMYTABLE.DUEAT, ______________ )
        .where(DUMMYTABLE.ID.in(someIds))
        .execute();

我在空白处尝试了以下代码,但出现编译错误

timestampAdd(Timestamp.valueOf(DUMMYTABLE.CREATEDAT), 5, DatePart.MINUTE)

感谢任何帮助或指导。

Timestamp.valueOf(String) 是 JDBC API 从字符串文字创建一个 Timestamp 值,例如

Timestamp.valueOf("2000-01-01 00:00:00.0");

您不能将 jOOQ Field<Timestamp> 传递给它。但你为什么要这样做?直接将字段引用传递给函数即可:

timestampAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);

或者,如果使用 JSR 310 类型,DSL.localDateTimeAdd():

localDateTimeAdd(DUMMYTABLE.CREATEDAT, 5, DatePart.MINUTE);