Dúvida JPQL [RESOLVIDO]

Amigos,

Tenho uma lista de serviços, nesta lista possuo uma esmalteId, que é uma FK.
O que eu quero é passar o esmalte, e baseado neste esmalte, fazer a busca por esmalteId na tabela serviço.

Estou fazendo desta forma:
Meu método para listar, passando esmalte como parâmetro

public List<Servico> listServicosByEsmalteId(Esmalte esmalte) {
        Query query = em.createQuery("select s.esmalteId from Servico s where s.esmalteId = :esmalteId");
        query.setParameter("esmalteId", esmalte);
        return query.getResultList();
    }

Pra fazer o teste:

Esmalte esmalte = new Esmalte();
        esmalte.setId(24);
        List<Servico> servicos = servicoFacade.listServicosByEsmalteId(esmalte);
        for(Servico s: servicos){
        System.out.println(s.getNome());
        }

Meu erro:
java.lang.ClassCastException: model.Esmalte cannot be cast to model.Servico

Eu sei que o problema está em

for(Servico s: servicos)

Se eu tirar o for e fizer System.out.println(servicos), estou recebendo no console: INFO: [model.Esmalte[ id=24 ]]

Alguém me ajuda a enteder por que estou recebendo este erro? Porque não estou tentando fazer cast de esmalte dentro de serviço, eu acho. Certo? :smiley:

Obrigado!

essa JPQL ta errada

select s.esmalteId from Servico s where s.esmalteId = :esmalteId

se vc quer trazer todos os serviços que tenham o esmalteId igual ao que vc esta passando sua JPQL deveria ser assim

select s from Servico s where s.esmalteId = :esmalteId

mudou pouca coisa mas antes vc estava retornando o esmalteId e não o serviço

e por isso o vc esta recebendo o
java.lang.ClassCastException: model.Esmalte cannot be cast to model.Servico

Danile, boa tarde!

Não se eu entendia o seu problema mais vamos lá.
Tenta alterar o seu método para:

public List<Servico> listServicosByEsmalteId(Esmalte esmalte) {
Query query = em.createQuery(“select s from Servico s where s.esmalteId = :esmalteId”);
query.setParameter(“esmalteId”, esmalte);
return query.getResultList();
}

Acho que assim o retorno será uma lista de obejtos Servico

Att,

Muito obrigado, Danilo e guga

esmalteId é um Long certo? Sendo, a consulta que você está fazendo vai te retornar uma lista de Long e não de Serviços. Se é isso que você quer, tente assim:

public List<Long> listServicosByEsmalteId(Esmalte esmalte) { Query query = em.createQuery("select s.esmalteId from Servico s where s.esmalteId = :esmalteId"); query.setParameter("esmalteId", esmalte.getId()); return query.getResultList(); }

Se quer a lista de Objetos Serviço o que disseram acima está correto.

Obrigado, Frederico!
Queria os Objects mesmo!
Abraço