Hibernate - Envers - vários alvos de auditoria
-
26-09-2019 - |
Pergunta
Já estou usando o Hibernate Envers para auditar entidades que são atualizadas por um usuário através da interface do usuário; No entanto, também tenho trabalhos assíncronos em segundo plano e gostaria de auditá -los também usando o Envers. Agora, para a interface do usuário, eu rastreio que httprequest fez a alteração que me dá a data, usuário, sessão etc. Para os trabalhos de fundo, eu gostaria de rastrear a data em que o trabalho foi executado e o trabalho exato que o modificou (classe de trabalho).
É possível configurar 2 entidades de auditoria, 1 para a interface do usuário e 1 para as mudanças do sistema?
Walter
Solução
Ainda não testei isso, mas estou simplesmente fazendo o seguinte:
@RevisionListener(SystemRevisionListener.class)
@Entity
public class SystemRevision extends AbstractRevision
{
@Column(nullable = false, updatable = false)
protected QuartzTriggerHandle job;
@Column(nullable = false, updatable = false)
protected Class jobClass;
...
}
@RevisionListener(WebRevisionListener.class)
@Entity
public class WebRevision extends AbstractRevision
{
@ManyToOne(optional = false)
@JoinColumn(nullable = false, updatable = false)
protected HttpRequest httpRequest;
...
}
Então, em cada ouvinte, faço o que preciso fazer para definir essas propriedades. Agora eu deveria ser capaz de rastrear como uma entidade é modificada, se um usuário fez a alteração (e em que solicitação ela está vinculada) ou se o sistema alterar a entidade, em que trabalho é responsável pela alteração. Eu estaria armazenando mais propriedades no SystemRevision do que isso, provavelmente os argumentos e o nome do método.