Hibernate – Monitorando atualizações de entidades

19 04 2017

Problema

Preciso monitorar cada atualização da entidade para tentar descobrir a causa de um relacionada ao versionamento da entidade

Solução

Utilizar o Listner do hibernate

Como?

Escrever um Listener

public class DocumentoListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(DocumentoListener.class);

    @PostUpdate
    public void documentoPrePersist(Documento entidade) {
        logarAlteracao(entidade);
    }

    private void logarAlteracao(Documento entity) {
        String informacoesDocumento = buscarInformacoesDoDocumento(entity);
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("[PostUpdate] Documento atualizado no BD " + informacoesDocumento + getStackTraceComString());
        }
    }

Anotar a entidade que será monitorada

@EntityListeners(DocumentoListener.class)
@Entity
@Table(name = "DOCUMENTO")
public class Documento extends AbstractBusinessEntity {

Configurar o persistence.xml

<property name="org.hibernate.envers.revision_field_name" value="id_revision" />
			<property name="org.hibernate.envers.revision_type_field_name" value="tp_revision" />
			<property name="hibernate.ejb.event.post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener, org.hibernate.envers.event.AuditEventListener" />
			<property name="hibernate.ejb.event.post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener, org.hibernate.envers.event.AuditEventListener" />
			<property name="hibernate.ejb.event.post-delete" value="org.hibernate.ejb.event.EJB3PostDeleteEventListener, org.hibernate.envers.event.AuditEventListener" />
			<property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener" />
			<property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener" />
			<property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener" />

 

Links: LINK1, LINK2 e LINK3