Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Consulta HQL

Estou precisando montar esta query

StringBuilder sb = new StringBuilder("SELECT emp FROM EmpresaEntity emp ");
sb.append("WHERE emp.id = :id ");
sb.append("AND emp.entidade = :entidade ");
sb.append("AND Cast(replace(substring(cast(emp.dataInicio As string), 1, 7), '-', '') as Integer) = Cast(:mesAnoas Integer) ");
Query query = entityManager.createQuery(sb.toString());
        query.setParameter("id", entidade.getId());
        query.setParameter("entidade", entidade.getEntidade());
        query.setParameter("mesAno", mesAnoInicio);
        aux = query.getResultList();

Sempre dá este erro: org.hibernate.QueryException: Could not resolve requested type for CAST : Integer

Entendo que não está convertendo para Integer.

Como resolver ?

6 respostas

Guilherme,

no final da montagem da query, não há espaço entre o parâmetro :mesAno e o as para fazer o casting. insere o espaço e vê se funciona.

Cast(:mesAno as Integer) ");

Caso contrário, posta aqui de novo..

Obrigado

A consulta esta parte está assim:

sb.append("AND Cast(replace(substring(cast(emp.dataInicio As string), 1, 7), '-', '') as Integer) = Cast(194401 as Integer) ");

Agora o erro é este:

org.hibernate.QueryException: Could not resolve requested type for CAST : Integer

Você pode usar a função month() para pegar apenas o mês da data informada no parâmetro, que acho que é o que você tá precisando. A sua HQL ficaria mais ou menos assim:

SELECT emp FROM EmpresaEntity emp WHERE emp.id = :id AND emp.entidade = :entidade AND month(emp.dataInicio) = :mesAno

Vê se atende...

na verdade é deve ser ser AnoMes

Posso fazer com dois parametros

year e month...

Vou testar

solução!

Consegui assim:

SELECT emp FROM EmpresaEntity emp WHERE emp.id = :id AND emp.entidade = :entidade AND month(emp.dataInicio) + year(emp.dataInicio) <= :mesano

Obrigado Manoel pela ajuda