我想使用 POJO 作为源来更新 JOOQ 记录中已更改的字段。Record.from(Object) http://www.jooq.org/javadoc/3.8.x/org/jooq/Record.html#from-java.lang.Object-几乎是正确的,但根据文档
生成的记录将把所有值的内部“已更改”标志设置为 true。
我只想要实际更改的字段(由例如确定的,Objects.equals(Object, Object) https://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#equals(java.lang.Object,%20java.lang.Object))更新他们的标志。
造成这种情况的两个原因是:
- 我不想触发插入
- 我只想在更新语句中向数据库发送新值(带宽、并发更新等)
此实施的原因...
生成的记录将把所有值的内部“已更改”标志设置为 true。
...很简单:如果不以这种方式实现,就无法强制更新未更改的值。在某些用例中这是需要的(例如批处理、避免太多不同的 SQL 字符串等)。这Record.from() http://www.jooq.org/javadoc/latest/org/jooq/Record.html#from-java.lang.Object-方法与其他方法一致Record
方法,例如Record.set(Field, Object) http://www.jooq.org/javadoc/latest/org/jooq/Record.html#set-org.jooq.Field-T-.
您可以修补内部更改的标志,如下所示:
// 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 https://github.com/jOOQ/jOOQ/issues/5394
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)