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

kag*_*ag0 5 java database orm jooq

我想使用POJO作为源更新JOOQ记录中的已更改字段.Record.from(Object)几乎是正确的,但根据文件

生成的记录将为所有值将其内部"已更改"标志设置为true.

我只希望实际更改的字段(如说,确定Objects.equals(Object, Object))更新其标志.

这样做的两个原因是:

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

Luk*_*der 4

此实施的原因...

生成的记录将把所有值的内部“已更改”标志设置为 true。

...很简单:如果不以这种方式实现,就无法强制更新未更改的值。在某些用例中这是需要的(例如批处理、避免太多不同的 SQL 字符串等)。该Record.from()方法与其他方法一致Record,例如Record.set(Field, Object)。

您可以修补内部更改的标志,如下所示:

// 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);
Run Code Online (Sandbox Code Playgroud)

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