Considere o fragmento de código a seguir, presente em uma cl...
String jpql = "select e from Empregado e where e.cargo = :c";
Query q = entityManager.createQuery(jpql, Empregado.class);
...I...
List <Empregados> empregados = q.getResultList ();
Para completar corretamente o fragmento de código de forma que a consulta retorne os empregados cujo cargo seja Gerente, a lacuna I deve ser preenchida por
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - q.setParameter("c", "Gerente");
A questão aborda o uso do Java Persistence API (JPA), que é uma especificação do Java EE para acesso, persistência e gerenciamento de dados entre objetos Java e um banco de dados relacional. O JPA serve como uma ponte entre o paradigma orientado a objetos e o relacional. No código apresentado, está sendo construída uma query JPQL (Java Persistence Query Language) para buscar entidades do tipo Empregado com um determinado cargo.
Para resolver a questão, você precisa entender como os parâmetros nomeados funcionam em JPQL. O parâmetro nomeado é representado por um : seguido de um identificador, que neste caso é :c. Esse parâmetro deve ser substituído por um valor antes da execução da query. A função setParameter é utilizada para substituir o parâmetro nomeado pelo valor desejado, que neste caso é a string "Gerente".
Vamos entender por que a alternativa E é a correta:
O método setParameter é usado para atribuir o valor ao parâmetro nomeado definido na query JPQL. No fragmento de código, o parâmetro nomeado é :c, e não :cargo ou qualquer outra coisa. Portanto, é necessário usar q.setParameter("c", "Gerente") para definir que o parâmetro c na query deve ser substituído pelo valor "Gerente".
As outras alternativas estão incorretas porque ou referenciam um nome de parâmetro inexistente, como "cargo" ou c sem aspas (que seria interpretado como uma variável e não como uma string), ou usam métodos que não são parte da API JPA, como setString ou setAttribute. A JPA define o método setParameter para essa finalidade, e é por isso que a alternativa E é a única que utiliza a chamada de método correta e o identificador do parâmetro conforme definido na query.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
E) q.setParameter("c", "Gerente");
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo