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

时间:2016-06-24 00:04:48

标签: java database orm jooq

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

  

结果记录将为所有值将其内部“已更改”标志设置为true。

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

这样做的两个原因是:

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

1 个答案:

答案 0 :(得分:3)

实施的原因......

  

结果记录的内部"已更改"对于所有值,flags设置为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);

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