Обойти Jooq оптимальную блокировку и DefaultRecordListener для некоторого метода - PullRequest
1 голос
/ 10 июля 2019

Я хотел бы синхронизировать таблицу с сервера A на B, запись должна быть точно такой же из источника. Это как ручная репликация.

Метод извлекает из исходной записи как json и вставляет / обновляет на целевом сервере, чтобы получить те же записи таблицы, включая поле версии.

У меня проблема с обновлением от источника к месту назначения, я обнаружил, что независимо от того, насколько все поля идентичны, будет обновляться дата изменения и поле версии.

Любое решение для принудительного обновления этих полей (версия или дата) без отключения параметра оптимистической блокировки и обхода настроенного класса «DefaultRecordListener»

1 Ответ

1 голос
/ 10 июля 2019

Начиная с jOOQ 3.11, невозможно обойти настройку версии записи или метки времени с помощью функции «из коробки». Я создал запрос функции для реализации этого в jOOQ 3.12: https://github.com/jOOQ/jOOQ/issues/8924

Существует несколько обходных путей, все из которых предполагают, что вы уже отключили Settings.executeWithOptimisticLocking в логике копирования данных

Обходной путь: Использование RecordListener

Если вы используете версии записи (не отметки времени), вы можете установить версию записи на version - 1 до сохранения своей записи. Это привело бы к обновлению версии до того же значения. Взломать, но может быть достаточно хорошо.

Обходной путь: для этой цели заново сгенерируйте таблицы

Вы можете повторно сгенерировать все таблицы, участвующие в этой операции, во второй раз без версий / временных меток записей, и использовать эти альтернативные сгенерированные таблицы для копирования данных.

Обходной путь: не использовать UpdatableRecord

Вместо использования UpdatableRecord вы можете написать действительные INSERT операторы. Обратите внимание, что вы можете передать любой Record в оператор INSERT с помощью метода InsertSetStep.set(Record). Это будет иметь тот же эффект, что и вызов record.insert(), то есть будут вставлены только измененные поля.

...