Passando meus primeiros parâmetros tive um problema.
Aqui seleciono meu tipo:
ContaTipo ct = (ContaTipo) em.createQuery(“Select t FROM ContaTipo t WHERE t.tipoId =” + 1).getSingleResult();
Blz, consigo pega-lo sem qq problema.
Mas aqui.
Query query = em.createQuery("Select c FROM Conta c WHERE c.tipoId =" + ct);
Collection<Conta> lsConta = query.getResultList()
Sendo que tipoId é do tipo ContaTipo.
Teoricamente, n deveria funcionar?
Não consigo, de todas as formas q tentei deu este erro:
Exception in thread “main” Local Exception Stack:
Exception [TOPLINK-8026] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Syntax error parsing the query [Conta.ContaPorTipo: Select c FROM Conta c WHERE c.tipoId =: ContaTipo], line 1, column 40: unexpected char [ ].
ContaTipo ct = (ContaTipo) em.createQuery("Select t FROM ContaTipo t WHERE t.tipoId =" + 2).getSingleResult();
Collection<Conta> lsConta;
lsConta = (Collection<Conta>) em.createQuery("select c.tipo from Conta c WHERE c.tipo=" + ct).getResultList();
for(Conta conta : lsConta)
System.out.println(conta.getDescricao());
O erro está quando a query vai ser executada. No primeiro exemplo funciona pq vc está passando direto o id.
Quando vc faz:
("Select c FROM Conta c WHERE c.tipoId =" + ct);
Vc está concatenando a query o Objeto ct. Então, será chamado o metodo toString() do objeto ct que retorna o estado atual do seu objeto.
Vc pode subscrever o metodo toString() retornando o tipoId no seu objeto ct ou criar um metodo que retorne o tipoId, tipo um getTipoId() e usa-lo para criar a query!