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.