Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados — FCC 2015

Banco de DadosBanco de Dados
Código
fc023348
Banca
FCC
Órgão
TRE-AP
Ano
2015
Nível
Superior
Cargo
Analista Judiciário - Análise de Sistemas
Em uma classe de entidade do banco de dados presente em uma aplicação que utiliza JPA existem as seguintes instruções:@NamedQuery(name="Cliente.listarTodos",query="select c from Cliente c") @Entitypublic class Cliente { // atributos e métodos} Considere que os atributos e métodos da classe Cliente estão implementados e mapeados adequadamente para a tabela Cliente do banco de dados. Em uma classe de acesso a dados da mesma aplicação, que possui um objeto em válido do tipo EntityManager, para executar a query da classe de entidade Cliente e obter os dados retornados em uma lista, utiliza-se:
  1. AQuery query = em.createNamedQuery("Cliente.listarTodos",Cliente.class); List <Clientes> clientes = query.getResultList();
  2. BResultSet query = em.createQuery("Cliente.listarTodos",Cliente.class); ArrayList <Clientes> clientes = query.getResultList();
  3. CQuery query = em.createNativeQuery("Cliente.listarTodos",Cliente.class); List <Clientes> clientes = query.getList();
  4. DQuery query = em.createQuery("Cliente.listarTodos",Cliente.class); List <Clientes> clientes = query.getResultList();
  5. EList query = em.createNamedQuery("Cliente.listarTodos",Cliente.class); ArrayList clientes = query.getResultSet();
Revelar gabarito e comentário

GabaritoA — Query query = em.createNamedQuery("Cliente.listarTodos",Cliente.class); List <Clientes> clientes = query.getResultList();

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”.

JPA: Execução de NamedQuery

Gabarito: letra A. A alternativa A utiliza corretamente em.createNamedQuery("Cliente.listarTodos", Cliente.class) e query.getResultList() para executar a NamedQuery definida na entidade e obter os resultados em uma lista. As demais alternativas erram ao usar createQuery (que espera uma string JPQL) ou createNativeQuery, ou ao chamar métodos inexistentes como getList() ou getResultSet().

A questão testa o conhecimento da API JPA para execução de consultas nomeadas. A @NamedQuery define uma consulta JPQL reutilizável. Para executá-la, utiliza-se o método createNamedQuery do EntityManager, que retorna um objeto Query (ou TypedQuery). Em seguida, getResultList() retorna a lista de entidades.

Alternativa A — ✅ Correta ⟵ GABARITO

Correta. em.createNamedQuery("Cliente.listarTodos", Cliente.class) recupera a NamedQuery e retorna um TypedQuery<Cliente>. O método getResultList() devolve uma List<Cliente> com os resultados.

Alternativa B — ❌ Incorreta

Erra ao usar em.createQuery("Cliente.listarTodos", Cliente.class). createQuery espera uma string JPQL, não o nome de uma NamedQuery. Além disso, o tipo de retorno é Query, não ResultSet (que é do JDBC). E getResultList() seria o correto, não getResultSet().

Alternativa C — ❌ Incorreta

Erra ao usar em.createNativeQuery("Cliente.listarTodos", Cliente.class). createNativeQuery é para SQL nativo, não para NamedQuery. Também chama getList(), que não existe; o método correto é getResultList().

Alternativa D — ❌ Incorreta

Erra ao usar em.createQuery("Cliente.listarTodos", Cliente.class). Mesmo problema da B: createQuery não aceita nome de NamedQuery.

Alternativa E — ❌ Incorreta

Erra ao atribuir o resultado diretamente a uma variável do tipo List (na verdade em.createNamedQuery retorna Query ou TypedQuery). O método chamado é getResultSet(), que não existe em JPA; o correto é getResultList().

Gabarito: letra A.

Link permanente: /questoes/fc023348