Hibernate: проверить, какие поля сущности изменены

Что у меня есть:

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

Что за проблема:

В обработчике я должен проверить, какие поля сущности были изменены:

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?
}

Я хочу сделать это по соображениям безопасности и уведомлений. Означает:

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

Какая проблема:

Я получаю очень уродливый код. На самом деле я перебираю все поля / коллекции и вызываюequals метод.

Вопрос:

Может быть, Hibernate предоставит более элегантный способ проверить, какие поля были изменены? Как?

Постскриптум

@victorantunes предоставляет решение, но оно кажется мне слишком полным. Может быть какие-нибудь альтернативы?

Ответы на вопрос(3)

Ваш ответ на вопрос