使用带有部分数据的 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
并取消设置您不想发送到数据库的列的所有更改标志。
我遇到的问题与以下 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
并取消设置您不想发送到数据库的列的所有更改标志。