Questão nº 29
Questão de Tecnologia da Informação · FCC TRT5 2022 (nº 29)
Considere o trecho de código a seguir, presente em um método de uma classe de aplicação criada utilizando-se JPA.
```
TypedQuery<Departamento> query = manager.createNamedQuery("Departamento.findAll",
Departamento.class);
List<Departamento> departamentos = I ;
```
Departamento.findAll é uma query nomeada na classe Departamento, que retorna todos os departamentos cadastrados na tabela departamento do banco de dados. O objeto manager é um objeto do tipo EntityManager criado sobre uma conexão válida com um banco de dados. Considere que todos os recursos necessários foram importados e que a conexão com o banco de dados foi realizada com sucesso. Nestas condições, para se obter a lista de departamentos retornada da tabela do banco de dados a lacuna I deve ser corretamente preenchida por
- Aquery.getResult().toList()
- Bmanager.excuteQuery()
- Cquery.getResult()
- Dquery.getResultList() (alternativa correta)
- Emanager.executeQuery(query)
Resposta comentada
Gabarito Alternativa D
Em JPA, após criar uma TypedQuery (uma consulta tipada que sabe qual tipo de objeto vai retornar), você precisa de um método para executá-la e obter os resultados. Se a consulta pode retornar múltiplos objetos, existe um método específico para isso.
- (A) Incorreta:
query.getResult().toList()não é válido. O métodogetResult()retorna um único objeto (ou lança exceção se houver múltiplos ou nenhum), e não uma coleção ou Stream sobre a qualtoList()possa ser chamado diretamente. - (B) Incorreta: O
manager(EntityManager) não possui um métodoexcuteQuery()(além do erro de digitação, não há um método com essa assinatura ou propósito para executar umaTypedQueryjá criada). - (C) Incorreta:
query.getResult()é usado quando se espera apenas um único resultado da consulta. Se a consulta retornar mais de um departamento, ele lançará umaNonUniqueResultException. Como a variáveldepartamentosé do tipoList<Departamento>, a expectativa é de múltiplos resultados, tornando este método inadequado. Armadilha: Esta é a alternativa mais tentadora porquegetResult()é um método válido, mas para um cenário diferente (resultado único). - (D) Correta:
query.getResultList()é o método correto para executar umaTypedQueryquando se espera uma lista de resultados. Ele retorna umjava.util.Listcontendo todos os objetos que correspondem à consulta, que é exatamente o que a variáveldepartamentosespera. - (E) Incorreta: O
manager(EntityManager) não possui um métodoexecuteQuery()que receba umaTypedQuerycomo argumento para execução. A execução é feita diretamente no objetoquery.
Fonte: FCC TRT5 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.