为了账号安全,请及时绑定邮箱和手机立即绑定

为某些方法绕过 Jooq 乐观锁定和 DefaultRecordListener

为某些方法绕过 Jooq 乐观锁定和 DefaultRecordListener

开满天机 2023-03-17 15:29:56
我想从服务器A同步表到B,记录应该与源完全相同。这就像手动复制工作一样。该方法是从源记录中检索为 json 并插入/更新到目标服务器以获取包含版本字段的相同表记录。我在从源更新到目标时遇到问题,我发现无论每个字段如何相同,它都会更新修改日期和版本字段。在不关闭乐观锁定参数和绕过自定义“DefaultRecordListener”类的情况下强制更新这些字段(版本或日期)的任何解决方案
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

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

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

解决方法:使用RecordListener

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

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

您可以在没有记录版本/时间戳的情况下第二次重新生成此操作中涉及的所有表,并使用这些替代生成的表进行数据复制。

解决方法:不要使用UpdatableRecord

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


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信