Questão nº 32

Questão de Tecnologia da Informação · FCC TRE-PR 2017 (nº 32)

FCC2017Técnico Judiciário - Área Apoio Especializado - Especialidade Programação de SistemasTecnologia da Informação
Gabarito: Aver comentário ↓

Considere o fragmento de código abaixo, que utiliza Hibernate Session, em um ambiente Java ideal.

```
Query q = getSession().createQuery("from Candidato where nome_candidato = :nome_candidato");
q.setString("nome_candidato","João");
```

Nesta consulta, caso o candidato João seja único na tabela do banco de dados, para obter os dados deste candidato em um objeto da classe Candidato, utiliza-se, na sequência do código, a instrução: `Candidato candidato =`

Resposta comentada

Gabarito Alternativa A

Quando você faz uma consulta no Hibernate e espera que ela retorne apenas um único item (como um candidato específico), você usa um método especial para pegar esse item, e muitas vezes precisa converter o resultado para o tipo certo de objeto.

  • (A) Correta: (Candidato) q.uniqueResult();
    A instrução uniqueResult() é o método padrão do Hibernate para executar uma consulta e retornar um único objeto. Se a consulta encontrar mais de um resultado, ela lançará uma exceção; se não encontrar nenhum, retornará null. O (Candidato) é um cast (conversão de tipo), necessário porque uniqueResult() retorna um Object, e precisamos explicitamente dizer ao Java que esperamos um objeto do tipo Candidato para atribuí-lo à variável candidato.

  • (B) Incorreta: q.getUsuario();
    Não existe um método getUsuario() na interface Query do Hibernate. A Query é usada para configurar e executar a consulta, não para acessar propriedades de um objeto resultante diretamente.

  • (C) Incorreta: q.getResultAll();
    Não existe um método getResultAll() na interface Query do Hibernate. Para obter uma lista de resultados, o método seria list() ou getResultList() (no JPA), que retornaria uma coleção, não um único objeto.

  • (D) Incorreta: (Candidato) q.getSession().getResult();
    Embora q.getSession() retorne a Session correta, não existe um método getResult() na interface Session para obter resultados de consulta dessa forma. A Session é usada para gerenciar o contexto de persistência, e as consultas são executadas pelo objeto Query.

  • (E) Incorreta: q.uniqueResult();
    Esta alternativa usa o método correto (uniqueResult()) para obter um único resultado. No entanto, o método uniqueResult() retorna um Object. Para atribuir esse Object a uma variável do tipo Candidato (como em Candidato candidato = ...), é obrigatório fazer um cast explícito para (Candidato). Sem o cast, o código não compilaria, pois o Java não sabe automaticamente que o Object retornado é um Candidato. Armadilha: Esta é a alternativa mais tentadora porque o método uniqueResult() está correto, mas a "pegadinha" é a omissão do cast necessário para que o código seja válido em Java.

Fonte: FCC TRE-PR 2017 Técnico Judiciário - Área Apoio Especializado - Especialidade Programação de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho