Erro com Cast Criteria

7 respostas
brunohansen

Olá, pessoal.

Tenho o seguinte código que funciona parcialmente só da problema com números.

predicates.add(criteriaBuilder.like((Expression) entity.get(field), "%" + filterLike.getQuery() + "%" ));

Para funcionar com números tentei adicionar um cast, porém passou a gerar uma exceção que mostro a seguir.

predicates.add(criteriaBuilder.like((Expression) entity.get(field)[b].as(String.class)[/b], "%" + filterLike.getQuery() + "%" ));

Exceção:

org.hibernate.hql.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 130 [select generatedAlias0 from br.mil.mar.casnav.jc3iedm.item.Airfield as generatedAlias0 where ( cast(generatedAlias0.id as varchar(255)) like :param0 ) and ( generatedAlias0.nameTxt like :param1 ) order by generatedAlias0.id asc]

Obs.: A query apresentada na exceção funciona corretamente.

Vi neste seite: http://stackoverflow.com/questions/4269389/using-jpa-2-0-criteria-api-and-cast-causes-generated-jpql-to-fail-in-hibernate, que isto é bug do hibernate. Será que é um bug mesmo? Tem alguma forma de contornar?

Já estou ficando louco, conto com a ajuda de vocês!

[]s

7 Respostas

brunohansen

Ninguém pode me ajudar?

:cry:

gilmaslima

vc já tentou guardar o valor da sua variavel int, double (sei lá) em uma outra variavel String e chamar seu criteria passando essa variavel String?

Priuli

Se eu não me engano existe um método que faz o like dos dois lados ou algo do tipo… c ñ me engano eu já usei no meu projeto de filter…

Pra quem não consegue segue link:
http://www.guj.com.br/java/221618-filter-dinamico-para-hibernate

Priuli

Ja tentou adicionado com restrictions no criteria:

criteria.add(Restrictions.ilike("fieldName", value, MatchMode.ANYWHERE ));
brunohansen

O pior é que eu estou usando JPA2!

Sera que dá para misturar Restrictions.ilike(“fieldName”, value, MatchMode.ANYWHERE ) com JPA?

Preciso disso nesse método:

public static Predicate createLikePredicate(String field, String value, JPAContext<?, ?> context) {
		try {
			return context.getCriteriaBuilder().like(context.getCriteriaBuilder().upper((Expression) context.getEntity().get(field)), "%" + value.toUpperCase() + "%" );
		} catch (Exception e) {
			throw createInvalidFieldException(field);
		}
	}

Valew pela ajuda.

marcelo.pr.br

alguém conseguiu uma solução pra esse problema?

Masami

alguém conseguiu uma solução pra esse problema? [2]

???

Criado 11 de março de 2011
Ultima resposta 16 de nov. de 2011
Respostas 7
Participantes 5