使用带有部分数据的 POJO 仅更新 JOOQ 记录中的更改字段

Update only changed fields in JOOQ record using POJO with partial data

我遇到的问题与以下 post 非常相似,但略有不同。

我为创建和更新调用获得了相同的 JSON 对象。在更新调用中,我可能不会收到所有字段,因此我想确保只更新更改的字段,而不是替换未提供的字段为 null。对数据库没有约束。

我按照上面的回答,但是运行稍微修改就出错了。

UserRecord existingRecord = existingUserRecordOptional.get();
UserRecord newUserRecord = new UserRecord();
newUserRecord.from(userPojo);

for (int i = 0; i < newRecord.size(); i++) {
   if (nonNull(newRecord.get(i)) && !Objects.equals(existingConsumerRecord.get(i), newRecord.get(i))) {
      existingUserRecord.setValue(DSL.val(existingUserRecord.field(i)), DSL.val(newUserRecord.getValue(i)));
   }
}

我收到的错误是:

字段 ('"db"."table"."description"') 不包含在行 (...)

改为这样做:

existingUserRecord.setValue(
  // Don't wrap this in DSL.val()
  (Field) existingUserRecord.field(i), 
  DSL.val(newUserRecord.getValue(i))
);

DSL.val()用于创建绑定值。

但是,既然您已经链接到 ,为什么不遵循不在记录之间复制值的方法呢?您可以使用 newUserRecord 并取消设置您不想发送到数据库的列的所有更改标志。