绕过Jooq优化锁定和DefaultRecordListener以获取某些方法



我想将表从服务器 A 同步到 B,记录应该与源完全相同。这就像手动复制工作一样。

该方法从源记录中检索为 json,并将插入/更新到目标服务器以获取相同的表记录,包括版本字段。

我在从源更新到目标时遇到问题,我发现无论每个字段如何相同,它都会更新修改日期和版本字段。

在不关闭乐观锁定参数并绕过自定义"DefaultRecordListener"类的情况下强制更新这些字段(版本或日期)的任何解决方案

从 jOOQ 3.11 开始,无法使用开箱即用的功能绕过记录版本或时间戳的设置。我创建了一个功能请求以在jOOQ 3.12中实现此功能:https://github.com/jOOQ/jOOQ/issues/8924

有一些解决方法,所有这些解决方法都假定您已经关闭了数据复制逻辑中的Settings.executeWithOptimisticLocking

解决办法:使用RecordListener

如果您使用的是记录版本(而不是时间戳),则可以在存储记录之前将记录版本设置为version - 1。这将导致版本再次更新为相同的值。一个黑客,但可能足够好。

解决办法:为此目的重新生成表

您可以再次重新生成此操作中涉及的所有表,而无需记录版本/时间戳,并使用这些替代生成的表进行数据复制。

解决办法:不要使用UpdatableRecord

与其使用UpdatableRecord,不如编写实际的INSERT语句。请注意,可以通过InsertSetStep.set(Record)方法将任何Record传递给INSERT语句。它将具有与调用record.insert()类似的效果,即只插入更改的字段。

最新更新