Каков наилучший способ определить, был ли объект изменен? - PullRequest
4 голосов
/ 27 февраля 2010

В своем веб-приложении на Java (JSF1.2, RichFaces) я сделал некоторые функциональные возможности «сохранения» bean-компонента. Он использует JAXB, чтобы превратить его в строку XML, а затем он сохраняется в базе данных. Если пользователь загружает это обратно, я хочу уведомить пользователя, если содержимое (bean) изменено, и оно должно быть сохранено снова.

Моя идея - переопределить функцию hashCode() с помощью 'org.apache.commons.lang.builder.HashCodeBuilder, однако у меня много полей и дочерних элементов. Есть ли другой способ справиться с такой функциональностью?

EDIT

«Сравнение» выполняется в другом представлении!

Любая помощь будет оценена!

Ответы [ 3 ]

5 голосов
/ 27 февраля 2010

Вы можете добавить флаг boolean dirty; к бобу, установить его в true в установщиках и очистить его во время перезагрузки и после сохранения.

1 голос
/ 27 февраля 2010

Нельзя полагаться только на hashCode, чтобы определить, был ли объект изменен. То есть то, что объект имеет тот же hashCode, что и раньше, НЕ означает, что он не был изменен.

0 голосов
/ 27 февраля 2013

Вы можете использовать функциональность Java MD5:

MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(myObject);
byte[] hash = digest.digest();
...