Создание 2 идентичных моделей: одна сопоставлена с основной таблицей, а другая сопоставлена с архивной таблицей. Создайте MapperExtension
с переопределенным методом after_insert()
(в зависимости от ваших требований вам также могут понадобиться after_update()
и after_delete()
). Этот метод должен скопировать данные из основной модели в архив и добавить их в сеанс. Существуют некоторые приемы автоматического копирования всех столбцов и отношений «многие ко многим».
Обратите внимание, что вам потребуется flush()
сеанс дважды, чтобы сохранить оба объекта, поскольку единица работы вычисляется до того, как расширение mapper добавит новый объект в сеанс. Вы можете переопределить Session.flush()
, чтобы решить эту проблему. Также автоматически увеличиваемые поля назначаются, когда объект очищается, поэтому вам придется отложить копирование, если они вам тоже понадобятся.
Это один из возможных сценариев, который доказал свою эффективность. Я хотел бы знать, есть ли лучший способ.