Теперь вместо Pojos я буду называть их Штаты!У вас есть стартовая позиция, вы повторяете и трансформируете свою модель через различные состояния.В конце у вас есть окончательное состояние терминала, которое вы хотели бы сохранить в базе данных
stream(A).map(P1).map(P2).map(P3)....-> set of B
Если вы используете технику, известную как Event Sourcing, вы можете сделать вывод, что да.Как бы это выглядело тогда?Вместо прямого сопоставления A с состоянием P1 и состояния P1 с состоянием P2 вы поставите в очередь все свои операции, которые необходимы и достаточны для сопоставления A с P1 и P1 с P2 и т. Д. Если вы хотите восстановить P1 или P2 в любомвремя, это будет просто продукт операций с очередями.Вы можете в любое время перемотать вперед или назад, если вы еще не изменили состояние своей БД.P1, P2, P3 могут действовать как моментальные снимки.
Таким образом, вы сможете восстановить точный поток отображения для этого атрибута.Насколько хорошо вы поставите свои опционы в очередь, если они будут так же хороши, как уровень атрибута, или если вы более детализированы, это зависит от вас.
Вот хорошая статья, которая описывает источник событий и как он работает: https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224
ОБНОВЛЕНИЕ:
Я могу придумать еще одну технику для захвата изменений атрибутов.Вы можете создавать свои Pojo-ы, это в значительной степени та же самая техника, используемая Hibernate для улучшения Pojos, и те же технические профили, которые используются для трассировки.Затем вы можете фиксировать и реагировать на каждый вызов сеттера на Pojo1, Pojo2, Pojo3.Не уверен, если бы я пошел по этому пути, хотя ....
Вот некоторые подробности о байт-коде, если https://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf