Ответ 1
Да, это можно сделать, и это было сделано... он называется hibernate. Просто используйте это и не "изобретайте колесо"
Учтите, что Ive получил стандартную Java bean: т.е. содержит элементы, которые String
, List
, HashMap
и т.д.
Мой вопрос: какой самый простой способ определить, был ли экземпляр такого объекта изменен, например, из предыдущего/исходного состояния?
Причина, по которой я хочу знать это, поэтому я определяю, должен ли я обновлять объект в БД, или нет, в случае, когда: (i) никаких изменений не было сделано или (ii) внесены изменения, но затем наоборот.
Я думал о сравнении hashCode или байт [], но, похоже, не работает. Любые идеи?
Да, это можно сделать, и это было сделано... он называется hibernate. Просто используйте это и не "изобретайте колесо"
если у вас есть сеттеры, уведомите список слушателей в этих сеттерах, если установлено новое значение.
У той же проблемы были hibernate разработчики, и они справились с ней, создав прокси для возвращаемых объектов. Прокси регистрирует каждый вызов сеттера и поэтому определяет, изменилась ли сущность.
Поскольку вы используете соглашения JavaBeans, было бы лучше, если бы ваши сеттеры обновили некоторый флаг, если они вызываются с аргументом, отличным от текущего значения текущего поля. Если вам нужно выяснить, приводит ли к двум или более вызовам фактическое изменение (например, A- > B- > A не изменяет), тогда он становится более сложным. Я не уверен, что это стоило бы накладных расходов.
Возможно, вы захотите использовать Java Persistance API (JPA), который намного лучше подходит для такого рода материалов. Он также может использоваться вне контекста Java EE, в простых приложениях Java SE. Там немного больше работы, так как вам нужно будет позаботиться о транзакционных фиксациях и откатах, но API окажется очень полезным в любом случае.