Hibernacja: sprawdź, które pola encji są zmodyfikowane

Co ja mam:

Mam encję Hibernate, która zawiera wiele pól nietrwałych, w tym kolekcje. Użytkownik może aktualizować każde pole osobno lub grupę pól jednocześnie.

Co za wyzwanie:

W programie obsługi powinienem sprawdzić, które pole jednostki zostało zmienione:

public void handle(Entity newVersion) {
  Session session = sessionFactory.openSession();
  Entity oldVersion = (Entity) session.get(Entity.class, entity.getId());
  List changedFields = compareChanges(oldVersion, newVersion);  //HOW TO CHECK WHICH FIELDS ARE CHANGED?
}

Chcę to zrobić ze względów bezpieczeństwa i powiadamiania. Znaczy:

Nie wszyscy użytkownicy mogą modyfikować wszystkie polaPowinienem powiadomić określonych użytkowników w określony sposób o zmianie niektórych pól.

Jaki problem:

Dostaję bardzo brzydki kod. Właściwie powtarzam wszystkie pola / kolekcje i dzwonięequals metoda.

Pytanie:

Może być Hibernate zapewniać bardziej elegancki sposób sprawdzania, które pola zostały zmodyfikowane? W jaki sposób?

P.S.

@victorantunes zapewniają rozwiązanie, ale wydaje mi się to zbyt obszerne. Czy mogą być jakieś alternatywy?

questionAnswers(3)

yourAnswerToTheQuestion