← Questões de Programação

Programação · FGV · 2022

Questão comentada de Programação

A técnica em informática Ana está implementando o módulo de persistência da aplicação TJTOApp utilizando o JPA (Java Persistence API). Observe abaixo o trecho principal da classe Departamento de TJTOApp: @Entity @Table(name="DEPART") public class Departamento { @Id @Column(name=”ID_DEPART”) private Integer id; @Column(name=”NM_DEPART”) private String nome; private Integer qtdPessoas; } Ana precisa que a propriedade qtdPessoas da classe Departamento seja calculada pela aplicação e não seja persistida na tabela DEPART. Para especificar que a propriedade qtdPessoas seja ignorada pelo mecanismo de persistência JPA, Ana deve adicionar à qtdPessoas a anotação do JPA:

Gabarito: B

No JPA, nem todo atributo de uma entidade precisa ir para a tabela. Quando a propriedade é apenas calculada pela aplicação, sem interesse de persistência, você indica isso com uma anotação específica para o mecanismo de persistência simplesmente ignorá-la. É o tipo de situação em que o atributo existe na classe, mas não deve virar coluna no banco. Parece simples, e é mesmo, mas a banca gosta de trocar o nome da anotação para testar se você sabe o papel de cada uma. No caso da classe Departamento, id e nome têm cara de coluna tranquila: um identificador, um campo textual, tudo no caminho normal do mapeamento. Já qtdPessoas foi descrita no enunciado como algo calculado pela aplicação e que não deve ser persistido na tabela DEPART. Isso encaixa exatamente na anotação @Transient, que diz ao JPA para ignorar o atributo no mapeamento de persistência. As outras anotações da questão pertencem a outros cenários: @GeneratedValue trata da geração automática de chave, @Temporal é para datas e horas, @Enumerated é para enums, e @Column(nullable = true) apenas ajusta a coluna, não remove o atributo da persistência. Ou seja, aqui o raciocínio é: se não vai para o banco, você marca como transitório. Simples, elegante e muito cobrado em prova. Fundamento doutrinário: em JPA, atributos não anotados podem seguir regras padrão de mapeamento, mas um campo explicitamente marcado como transitório é excluído da persistência. Isso é coerente com a ideia clássica de separar estado persistente do estado calculado pela aplicação.

Continue treinando

Questões relacionadas