Questão nº 43
Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 43)
Considere o método abaixo, existente em uma classe de uma aplicação Java em condições ideais, que utiliza JPA 2.0. Considere a execução com sucesso de um método chamado conectar, que estabelece a conexão com um banco de dados, e do método desconectar, que encerra a conexão. Considere também que manager é um objeto do tipo EntityManager, criado com sucesso no método conectar.
public List<Departamento> buscarDeps() {
conectar();
try {
TypedQuery<Departamento> query = manager.createNamedQuery("Departamento.findAll",
Departamento.class);
List<Departamento> deps = query.getResultList();
return deps;
} catch (NoResultException ex) {
return null;
} finally {
desconectar();
}
}
Nesse método, "Departamento.findAll" refere-se
- Aao método findAll existente na classe Departamento.
- Ba uma query nomeada por meio da anotação `@NamedQuery` na classe Departamento. (alternativa correta)
- Cao comando SELECT da classe Departamento, nomeado pela anotação `@SQLQuery`.
- Dao método findAll, que será criado na classe Departamento, quando esta instrução for executada.
- Ea um método de uma stored procedure que será executada no banco de dados, retornando todos os departamentos cadastrados.
Resposta comentada
Gabarito Alternativa B
Em JPA, uma `NamedQuery` é uma consulta (escrita em JPQL ou SQL) que você define uma vez, geralmente na sua classe de entidade (como `Departamento`), e dá um nome a ela. Depois, você pode usar esse nome para executar a consulta em qualquer parte do seu código, tornando-o mais organizado e fácil de manter.
(A) Incorreta: `createNamedQuery` não chama métodos Java; ele busca e executa uma consulta previamente definida por um nome.
(B) Correta: `createNamedQuery` é o método padrão do JPA para referenciar e executar uma consulta que foi nomeada (geralmente usando a anotação `@NamedQuery`) na classe de entidade `Departamento`.
(C) Incorreta: A anotação padrão do JPA para consultas nomeadas é `@NamedQuery` (ou `@NamedNativeQuery` para SQL nativo), não `@SQLQuery`.
(D) Incorreta: O JPA não cria métodos dinamicamente; ele executa consultas que já foram definidas.
(E) Incorreta: Embora JPA possa executar stored procedures, a sintaxe `createNamedQuery` com um nome como "Departamento.findAll" é típica para uma consulta JPQL ou SQL nomeada, não para uma stored procedure.
Fonte: FCC TRT17 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.