Galera, estou tendo esse erro ao tentar executar essa Query:
Query query = this.entityManager.createQuery("SELECT l FROM Lancamentos as l" +
" WHERE l.datavencimento < :data" +
" AND l.status = :status");
query.setParameter("datavencimento", data);
query.setParameter("status", "A");
Erro:
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [datavencimento]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:358)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:71)
at br.com.controleboleto.repository.VerificaVencimentoRepository.verificavencidos(VerificaVencimentoRepository.java:29)
at br.com.controleboleto.bean.ControleVencidosBean.verificavencidos(ControleVencidosBean.java:40)
at br.com.controleboleto.bean.ControleVencidosBean.getVencidos(ControleVencidosBean.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
... 48 more
Caused by: org.hibernate.QueryParameterException: could not locate named parameter [datavencimento]
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:107)
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:461)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:431)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:352)
... 62 more
Aqui você declarou como: :data
E aqui você chama por nome diferente: query.setParameter(“datavencimento”, data);
1 curtida
Bem, alterei para como vc falou:
Query query = this.entityManager.createQuery("SELECT l FROM Lancamentos as l" +
" WHERE l.datavencimento < data" +
" AND status = :status");
query.setParameter("datavencimento", data);
query.setParameter("status", "A");
E tive o mesmo erro:
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [datavencimento]
Porém, eu monto o Select da forma que disse anteriormente em outras partes e funciona normalmente:
Exemplo:
Query query = this.entityManager.createQuery("SELECT COUNT(l.id) FROM Lancamentos l" +
" WHERE l.datapagamento IS NOT NULL" +
" AND l.status = :status" +
" AND l.dataemissao" +
" BETWEEN :inicio" +
" AND :fim");
query.setParameter("status", status);
query.setParameter("inicio", inicio);
query.setParameter("fim", fim);
E o problema realmente é a [datavencimento], pois se eu tira-la o select é montado normalmente:
[code]Query query = this.entityManager.createQuery(“SELECT l FROM Lancamentos as l” +
" WHERE l.status = :status");
query.setParameter("status", "A");[/code]
Seu problema é que você ta mudando d+ o código e não está reparando oq está acontecendo (sem ofensas, eu falo assim com meus alunos =P).
Toda vez que você fizer query.setParameter(“datavencimento”, data); você precisa ter um parâmetro declarado como “:datavencimento”.
Por isso que se você retirar funciona, pois olha como você escreveu a query: WHERE l.datavencimento < data. Onde está “:datavencimento”? Eu só vejo l.datavencimento.
Vai com calma e revise linha por linha da sua query. [=
De boa … relaxa …rs
Então, realmente vc tinha razão, o problema era a variavel para comparação … ficou dessa forma e funcionou …
[code]Query query = this.entityManager.createQuery(“SELECT l FROM Lancamentos as l” +
" WHERE l.datavencimento < :datavencimento" +
" AND l.status = :status");
query.setParameter("datavencimento", datavencimento);
query.setParameter("status", "A");[/code]
Obrigado pela força !!
Estou tendo o mesmo problema…
Alguém pode me ajudar?
@Override
@SuppressWarnings(“unchecked”)
@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
public List buscarContasBancariasByFilter(Map<String, Object[]> filters, IFetchEager… eagers) {
Query query = WaveQLExpression.applyExpression(em, ContaBancariaSQL.BUSCAR_CONTAS, filters, null);
query.setParameter(“cdEmpresa”, CodEmpresaHolder.get());
List contaBancarias = (List) query.getResultList();
FetchEagerUtils.runFetch(contaBancarias, eagers);
return contaBancarias;
}
[quote=Rafael Romão Bertoni]Estou tendo o mesmo problema…
Alguém pode me ajudar?
@Override
@SuppressWarnings(“unchecked”)
@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
public List buscarContasBancariasByFilter(Map<String, Object[]> filters, IFetchEager… eagers) {
Query query = WaveQLExpression.applyExpression(em, ContaBancariaSQL.BUSCAR_CONTAS, filters, null);
query.setParameter(“cdEmpresa”, CodEmpresaHolder.get());
List contaBancarias = (List) query.getResultList();
FetchEagerUtils.runFetch(contaBancarias, eagers);
return contaBancarias;
}[/quote]Vc leu a solução acima?
Sim eu li… mas eu meu problema era bem diferente, mas já consegui aqui… Você leu o meu código ? hehehhhehe
[quote=Rafael Romão Bertoni]Sim eu li… mas eu meu problema era bem diferente, mas já consegui aqui… Você leu o meu código ? hehehhhehe[/quote]Nunca vi esse erro acontecer se não pelo mesmo motivo.
Independente se for por critéria ou qualquer outro artifício.
Pelo menos você resolveu. [=