簡體   English   中英

使用帶有部分數據的 POJO 僅更新 JOOQ 記錄中的更改字段

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

我有一個與以下帖子非常相似的問題,但略有不同。 使用 POJO 僅更新 JOOQ 記錄中更改的字段

我得到相同的 JSON object 用於創建和更新調用。 在更新調用中,我可能不會收到所有字段,因此我想確保僅更新更改的字段,而不是替換 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"') 不包含在 Row (...)

改為這樣做:

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

DSL.val()用於創建綁定值。

但是,既然您已鏈接到上一個問題,為什么不遵循不復制記錄之間的值的方法呢? 您可以使用newUserRecord並取消設置您不想發送到數據庫的列的所有更改標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM