我想将表从服务器A同步到B,记录应该与源完全相同。这就像手动复制工作一样。
该方法从源记录中检索 json 并插入/更新到目标服务器以获取包括版本字段的相同表记录。
我在从源更新到目标时遇到问题,我发现无论每个字段如何相同,它都会更新修改日期和版本字段。
任何强制更新这些字段(版本或日期)而不关闭乐观锁定参数并绕过自定义“DefaultRecordListener”类的解决方案
最佳答案
从 jOOQ 3.11 开始,无法使用开箱即用的功能绕过记录版本或时间戳的设置。我创建了一个功能请求来在 jOOQ 3.12 中实现此功能:https://github.com/jOOQ/jOOQ/issues/8924
有一些解决方法,所有这些都假设您已经关闭 Settings.executeWithOptimisticLocking
在您的数据复制逻辑中
解决方法:使用 RecordListener
如果您使用记录版本(不是时间戳),则可以在存储记录之前将记录版本设置为版本 - 1
。这将导致版本再次更新为相同的值。一个黑客,但可能已经足够好了。
解决方法:为此目的重新生成表
您可以再次重新生成此操作涉及的所有表,而无需记录版本/时间戳,并使用这些替代生成的表进行数据复制。
解决方法:不要使用 UpdatableRecord
您可以编写实际的 INSERT
语句,而不是使用 UpdatableRecord
。请注意,您可以通过 InsertSetStep.set(Record)
将任何 Record
传递到 INSERT
语句。方法。它将具有与调用 record.insert()
类似的效果,即仅插入更改的字段。
关于java - 绕过 Jooq 乐观锁定和 DefaultRecordListener 的某些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968003/