Hibernate: verifica quais campos da entidade são modificados

O que eu tenho:

Eu tenho a entidade Hibernate, que contém muitos campos não transitórios, incluindo coleções. O usuário pode atualizar cada campo separadamente ou algum grupo de campos de uma só vez.

Que desafio:

No manipulador, devo verificar qual campo da entidade foi alterado:

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

Eu quero fazer isso por razões de segurança e notificação. Significa:

Nem todos os usuários podem modificar todos os camposEu devo notificar usuários específicos de maneiras específicas em alguns campos.

Que problema:

Eu recebo um código muito feio. Na verdade eu percorro todos os campos / coleções e chamoequals método.

Questão:

Pode ser o Hibernate fornecer uma maneira mais elegante de verificar quais campos foram modificados? Como?

P.S.

@victorantunes fornece uma solução, mas parece muito abrangente para mim. Pode haver algumas alternativas?

questionAnswers(3)

yourAnswerToTheQuestion