Определить, был ли изменен объект Java?

Учтите, что Ive получил стандартную Java bean: т.е. содержит элементы, которые String, List, HashMap и т.д.

Мой вопрос: какой самый простой способ определить, был ли экземпляр такого объекта изменен, например, из предыдущего/исходного состояния?

Причина, по которой я хочу знать это, поэтому я определяю, должен ли я обновлять объект в БД, или нет, в случае, когда: (i) никаких изменений не было сделано или (ii) внесены изменения, но затем наоборот.

Я думал о сравнении hashCode или байт [], но, похоже, не работает. Любые идеи?

Ответ 1

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

Ответ 2

если у вас есть сеттеры, уведомите список слушателей в этих сеттерах, если установлено новое значение.

Ответ 3

У той же проблемы были hibernate разработчики, и они справились с ней, создав прокси для возвращаемых объектов. Прокси регистрирует каждый вызов сеттера и поэтому определяет, изменилась ли сущность.

Ответ 4

Поскольку вы используете соглашения JavaBeans, было бы лучше, если бы ваши сеттеры обновили некоторый флаг, если они вызываются с аргументом, отличным от текущего значения текущего поля. Если вам нужно выяснить, приводит ли к двум или более вызовам фактическое изменение (например, A- > B- > A не изменяет), тогда он становится более сложным. Я не уверен, что это стоило бы накладных расходов.

Возможно, вы захотите использовать Java Persistance API (JPA), который намного лучше подходит для такого рода материалов. Он также может использоваться вне контекста Java EE, в простых приложениях Java SE. Там немного больше работы, так как вам нужно будет позаботиться о транзакционных фиксациях и откатах, но API окажется очень полезным в любом случае.