Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

JPQL

Aos 5:34 do vídeo foi criado o seguinte trecho de código: Query query = manager. createQuery("select m from Movimentacao m where m.conta.id=:pConta");

query.setParameter("pConta", conta);

Eu fiz exatamente dessa forma e ao executar tive a seguinte exceção:

Exception in thread "main" java.lang.IllegalArgumentException: Parameter value [ null null null null] did not match expected type [java.lang.Integer (n/a)] at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:897) at org.hibernate.jpa.internal.QueryImpl.access$000(QueryImpl.java:61) at org.hibernate.jpa.internal.QueryImpl$ParameterRegistrationImpl.bindValue(QueryImpl.java:235) at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:638) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:163) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:32) at br.com.caelum.financas.util.TestaConsulta.main(TestaConsulta.java:24)

Minha classe só funcionou quando alterei o código de: query.setParameter("pConta", conta);

para: query.setParameter("pConta", conta.getId());

Gostaria de saber porque foi lançada a exceção.

1 resposta
solução!

Na query

select m from Movimentacao m where m.conta.id=:pConta

você está selecionando todos os objetos do tipo movimentação que pertençam a uma determinada conta com um certo id. Se você usar

query.setParameter("pConta", conta);

ocorrerá uma exception pois você está passando a referência do objeto conta e não o id dela. Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software