有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java仅使用POJO更新JOOQ记录中更改的字段

我想使用POJO作为源更新JOOQ记录中更改的字段^{}几乎是正确的,但根据文档

The resulting record will have its internal "changed" flags set to true for all values.

我只希望实际更改(由^{}确定)的字段的标志更新

原因有两个:

  • 我不想触发插入
  • 我只想在update语句中向数据库发送新值(带宽、并发更新等)

共 (1) 个答案

  1. # 1 楼答案

    执行此操作的原因

    The resulting record will have its internal "changed" flags set to true for all values.

    。。。很简单:如果事情不是以这种方式实现的,就没有办法强制更新未更改的值。有些用例需要这样做(例如批处理、避免过多不同的SQL字符串等)。^{}方法与其他Record方法一致,例如^{}

    您可以按如下方式修补内部更改的标志:

    // Load all values and mark them all as "changed"
    record.from(object);
    
    // Undo the undesired flags
    for (int i = 0; i < record.size(); i++)
        if (Objects.equals(record.get(i), record.original(i)))
            record.changed(i, false);
    

    我还在jOOQ中创建了一个特性请求。也许API可以改进,因为很多人都有这样的要求: https://github.com/jOOQ/jOOQ/issues/5394