Инициировать событие в Java - PullRequest
1 голос
/ 08 апреля 2020

Требуется идентифицировать измененный атрибут в объекте сущности.

Как идентифицировать измененный атрибут в полезной нагрузке запроса как объект сущности при сравнении с данными предыдущего значения в таблице.

Примечание: я не хочу сравнивать каждый атрибут с полем таблицы, есть ли способ сравнить весь объект Entity с полем таблицы.

1 Ответ

1 голос
/ 08 апреля 2020

Я не хочу сравнивать каждый атрибут с полем таблицы

Так что вам не нужен шаблон.

Тогда осталось 3 варианта.

  1. Отражение

    Используйте Java Отражение для итерации (нужна рекурсия, если ваша модель не плоская) через переменные-члены и сравнение. Когда у меня был этот вариант использования, я скопировал код из beancopy Spring и расширил его.

  2. Использовать манипулирование байт-кодом

    a. Runtime генерация байт-кода - используйте bytebuddy / cglib / asm, чтобы сгенерировать шаблон для вас, когда приложение запустится

    b. Compiletime генерация байт-кода - Расширьте lombok, чтобы сгенерировать шаблон для вас, когда ваше приложение компилируется

  3. Не используйте POJO, вместо этого используйте Map<String,Object> Вы получите гибкость рефлексии, но, очевидно, вы потеряете здесь преимущество типизированного языка.

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

CD C (сбор данных изменений)

Если вы используете базу данных, которая поддерживает распространение данных изменений, вы можете отделить свое приложение от этой ответственности.

Улов ,

  1. Это асинхронная c операция

  2. изменение Информация о данных зависит от выбранной вами базы данных. Старое значение может или не может быть там. Если старого значения нет, ему снова нужна другая стратегия, чтобы выяснить, что изменилось.

...