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?