O analista João deve utilizar o Hibernate Envers para imple...

Próximas questões
Com base no mesmo assunto
Q3874365 Engenharia de Software
O analista João deve utilizar o Hibernate Envers para implementar a auditoria de entidades em um sistema de gestão de projetos. Um dos requisitos de negócio é que, ao ser realizada uma alteração na entidade Projeto, o histórico de revisões dessa entidade inclua, além dos dados da alteração, o nome do usuário responsável pela modificação. Para atender ao requisito de negócio da forma mais adequada, João deve:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: E

Fundamento decisivo: O ponto decisivo é que o requisito pede registrar o nome do usuário como dado adicional da revisão no Envers, e não como atributo da entidade Projeto ou por mecanismo genérico de auditoria.

Tema central: Metadados de revisão
Análise das alternativas
A
Errada
Está errada porque desloca o dado para um campo específico da tabela de auditoria da entidade Projeto. Pela base, o username deve ser tratado como metadado da revisão, modelado na entidade de revisão, e não como coluna própria em cada tabela de auditoria da entidade auditada.
B
Errada
Está errada porque aponta um 'filtro de auditoria' como mecanismo para interceptar alterações e acrescentar o usuário ao histórico. O Envers resolve esse requisito por entidade de revisão customizada associada a RevisionListener, e não por um filtro de auditoria para tratar o nome do usuário.
C
Errada
Está errada porque AuditOverride tem outra finalidade: sobrescrever configuração de auditoria de propriedades herdadas ou embutidas. Não serve para criar atributo adicional de usuário no registro de revisão.
D
Errada
Está errada porque troca o mecanismo específico do Envers por um mecanismo genérico do Hibernate. Além disso, a alternativa pressupõe um campo 'revisedBy', e a base é expressa ao dizer que esse campo não é padrão do Envers.
E
Certa
A alternativa E descreve o mecanismo próprio do Envers para esse caso: configurar uma entidade de revisão customizada e um RevisionListener para preencher, no momento da criação da revisão, um campo adicional com o usuário logado. Esse é o procedimento adequado porque o nome do usuário, nesse contexto, é metadado da revisão, e o Envers prevê exatamente esse ponto de extensão para persistir propriedades adicionais da revisão.
Pegadinha da questão
A confusão real era trocar o recurso específico do Envers para metadados de revisão por soluções genéricas ou por estruturas da própria tabela de auditoria da entidade, além de tratar o username como atributo da entidade auditada em vez de metadado da revisão.
Dica para questões semelhantes
  • Se o requisito envolve informação adicional sobre a revisão, trate isso como metadado da revisão, não como atributo de negócio da entidade auditada.
  • No Envers, para gravar dados extras da revisão, procure entidade de revisão customizada com RevisionListener.
  • Quando a alternativa citar mecanismo genérico do Hibernate, compare com o ponto de extensão específico do Envers antes de aceitar.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A resposta correta é a letra E.

João deve configurar um Revision Listener no Envers para capturar o evento de alteração e preencher um campo personalizado na entidade de revisão com o nome do usuário logado. Esta é a abordagem documentada e recomendada pela documentação oficial do Hibernate Envers para adicionar metadados personalizados às revisões, como informações de usuário ou endereço IP.

️ Por que as outras alternativas estão incorretas?

Alternativa A (Customized Revision Metadata): Embora o conceito de "metadados de revisão personalizados" esteja correto, ele não é implementado através de uma funcionalidade específica com esse nome. A implementação desse conceito é feita, na prática, exatamente através da criação de uma RevisionEntity e um RevisionListener .

Alternativa B (Filtro de auditoria): O Envers não possui um conceito nativo de "filtro de auditoria" para essa finalidade. A interceptação correta e a mais simples é feita através do RevisionListener.

Alternativa C (Anotação customizada herdada de AuditOverride): A anotação @AuditOverride é usada para sobrescrever configurações de auditoria em componentes embutidos (como @Embeddable), e não para adicionar metadados de revisão como o nome do usuário .

Alternativa D (Interceptor do Hibernate): Esta é uma solução de mais baixo nível e mais genérica. Embora funcione, ela não é específica do Envers e exigiria que João implementasse manualmente a lógica para associar o nome do usuário ao número da revisão correta. O RevisionListener é a ferramenta certa para o trabalho, pois opera dentro do ciclo de vida de criação de revisões do Envers.

Fonte: DeepSeek

O Revision Listener no Hibernate Envers permite interceptar a criação de novas revisões e adicionar metadados personalizados (como o ID do usuário, endereço IP ou detalhes da operação) à tabela de auditoria. Para utilizá-lo, você deve implementar a interface RevisionListener, passando a classe customizada para a anotação  

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo