[RESOLVIDO]could not locate named parameter [datavencimento]

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. [=