java - 绕过 Jooq 乐观锁定和 DefaultRecordListener 的某些方法

标签 java jooq

我想将表从服务器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/

相关文章:

transactions - 如何在 Kotlin 中更轻松地使用 Jooq 事务

java - 以逗号分割字符串

java - NoSuchElementException 不断被触发,我不知道为什么

java - 在 URL 中包含变量,返回错误页面

java - 如何在 Chef 中接受 Java 下载的 Oracle 条款

java - JOOQ:如何将记录映射到别名表(来自嵌套查询)

java - Jooq 数组作为集合

java - 这个提取可以完成更多 "elegantly"吗?

java - 我们如何通过不完整的名称找到产品或类别?

java - jOOQ Fluent API 中间结果是不可变的吗?