Pular para o conteúdo principal

Questão de Engenharia de Software — Frameworks — FGV 2026

Engenharia de SoftwareFrameworks
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:
  1. 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;
  2. 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;
  3. 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;
  4. 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;
  5. 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.

Gabarito: letra E.

Link permanente: /questoes/fg133901