Questão de Engenharia de Software — Frameworks — FGV 2026
Engenharia de Software›Frameworks
Código
fg133901
Banca
FGV
Órgão
TJ-RJ
Ano
2026
Nível
Superior
Cargo
Analista Judiciário - Tecnologia da Informação - Analista de Sistemas
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:
Autilizar a funcionalidade de Customized Revision Metadata do Envers para armazenar o nome do usuário em um campo específico da tabela de auditoria da entidade Projeto;
Bimplementar um filtro de auditoria no Envers para interceptar as operações de alteração na entidade Projeto e adicionar o nome do usuário ao histórico de revisões;
Ccriar uma anotação customizada, herdada de AuditOverride, para incluir o nome do usuário como um atributo adicional no registro de auditoria da entidade Projeto;
Dutilizar um interceptor do Hibernate para capturar as operações de persistência e adicionar o nome do usuário ao campo revisedBy em cada registro de auditoria da entidade Projeto;
Econfigurar um Revision Listener no Envers para capturar o evento de alteração na entidade Projeto e preencher um campo customizado com o nome do usuário logado no momento da alteração.
Revelar gabarito e comentário▾
GabaritoE — configurar um Revision Listener no Envers para capturar o evento de alteração na entidade Projeto e preencher um campo customizado com o nome do usuário logado no momento da alteração.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Hibernate Envers – Auditoria com Metadados Customizados
Gabarito: letra E. Para incluir o nome do usuário no histórico de revisões usando o Hibernate Envers, a prática padrão é configurar um Revision Listener que, ao capturar um evento de alteração, preenche um campo customizado (ex.: revisedBy) com o nome do usuário logado. As demais alternativas propõem mecanismos inadequados ou não específicos do Envers.
A banca testa o conhecimento da API do Envers para auditoria. O Envers já fornece tabelas de auditoria automáticas, mas para adicionar metadados adicionais (como usuário responsável), é necessário estender a entidade de revisão e implementar um RevisionListener.
SE LIGUE NESSA!
O Hibernate Envers oferece uma abordagem declarativa com anotações como @Audited para entidades. Para metadados customizados, cria-se uma classe de revisão anotada com @RevisionEntity e um RevisionListener.
Aspecto
Alternativa E (Gabarito)
Alternativa A
Alternativa B
Alternativa C
Alternativa D
Mecanismo proposto
Revision Listener
Customized Revision Metadata
Filtro de auditoria
Anotação @AuditOverride
Interceptor do Hibernate
Adequação ao Envers
✅ Correta (mecanismo nativo e recomendado)
❌ Incorreta (descrição genérica e imprecisa)
❌ Incorreta (não existe no Envers)
❌ Incorreta (finalidade diversa)
❌ Incorreta (genérico, não específico do Envers)
Forma de implementação
Classe de revisão + @RevisionEntity + listener
Não especifica corretamente o padrão
Não se aplica
Usado para sobrescrever auditoria de propriedades
Intercepta persistência, mas não é o padrão do Envers
Alternativa A — ❌ Incorreta
A funcionalidade de Customized Revision Metadata existe, mas a descrição genérica de "armazenar em campo específico da tabela de auditoria da entidade Projeto" não reflete o mecanismo real. O correto é criar uma entidade de revisão separada (não na tabela da entidade auditada) com campos adicionais e popular via listener.
Alternativa B — ❌ Incorreta
Envers não possui um conceito de "filtro de auditoria" para interceptar operações. O mecanismo correto é o Revision Listener, não um filtro.
Alternativa C — ❌ Incorreta
@AuditOverride é usado para sobrescrever configurações de auditoria em propriedades de entidades (ex.: @AuditOverride(forClass = ... , isAudited = false)), não para adicionar metadados de revisão.
Alternativa D — ❌ Incorreta
Interceptors do Hibernate são genéricos e poderiam funcionar, mas não são a abordagem específica do Envers. O Envers já possui seu próprio ponto de extensão (RevisionListener), que é mais elegante e evita conflitos.
Alternativa E — ✅ Correta ⟵ GABARITO
A configuração de um Revision Listener é a maneira correta e recomendada. Exemplo:
@RevisionEntity(UserRevisionListener.class)
public class RevEntity {
@Column(name = "revised_by")
private String username;
// getter/setter
}
public class UserRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
RevEntity rev = (RevEntity) revisionEntity;
rev.setUsername(SecurityUtils.getCurrentUser());
}
}
Assim, cada revisão gerada pelo Envers conterá o nome do usuário logado.
PEGA ESSA DICA!
Memorize o trio: @RevisionEntity, RevisionListener e a entidade de revisão customizada. É o padrão pedido em concursos para metadados de auditoria no Hibernate Envers.