Estou com o seguinte erro nessa Criteria que utiliza subquery;
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Meu Criteria é essa
DetachedCriteria dc = DetachedCriteria.forClass(Tramitacao.class, "t2");
dc.setProjection(Projections.max("t2.comentario"));
dc.add(Restrictions.idEq("s.codigo"));
Criteria c = session.createCriteria(Solicitacao.class,"s");
c.createAlias("s.tramitacao","tramitacao",JoinType.INNER_JOIN)
.createAlias("tramitacao.tipoestado","tipoEstado",JoinType.INNER_JOIN)
.add(Subqueries.in("tramitacao.codigo", dc));
O erro ocorre justamente nesse ponto:
.add(Subqueries.in("tramitacao.codigo",dc));
Se eu tentar comparar string, ele executa corretamente, porém quando tento compar os codigo que é um integer com um conjuto de codigo(s) que são integer ai ocorre o erro mencionado acima, o que poderia ser ? tenho que fazer cast ?
o erro nao parece ser na subquery, mas apenas no atributo que está passando
ele está tentando dar um cast de string para integer,
qual o tipo dessa variavel dc?
J
jonasrn
fabiozanardi:
o erro nao parece ser na subquery, mas apenas no atributo que está passando
ele está tentando dar um cast de string para integer,
qual o tipo dessa variavel dc?
a variavel dc tá declarada na parte inicial do código
DetachedCriteria dc
Dei uma melhorada no código para ficar tudo junto:
Criteria c = session.createCriteria(Solicitacao.class,"s");
c.createAlias("s.tramitacao","tramitacao",JoinType.INNER_JOIN)
.createAlias("tramitacao.tipoestado","tipoEstado",JoinType.INNER_JOIN)
.add(Subqueries.in("tramitacao.codigo",DetachedCriteria.forClass(Tramitacao.class,"t2")
.setProjection(Projections.max("t2.codigo")).add(Restrictions.idEq("s.codigo"))));
Esse aqui é o que aparece no log
select
count(*) as y0_
from
sic.solicitacao this_
inner join
sic.tramitacao tramitacao1_
on this_.codigo=tramitacao1_.codigo_solicitacao
inner join
sic.tipoestado tipoestado2_
on tramitacao1_.codigo_tipoestado=tipoestado2_.codigo
where
? in (
select
max(t2_.codigo) as y0_
from
sic.tramitacao t2_
where
t2_.codigo = ?
)
AnjoVingador
Você já tentou executar somente a subquery?Se não tentou tente para ver se o problema é só nela mesmo.
Seu “s.codigo” é String ou Integer?
J
jonasrn
AnjoVingador:
Você já tentou executar somente a subquery?Se não tentou tente para ver se o problema é só nela mesmo.
Seu “s.codigo” é String ou Integer?
o s.codigo é um INTEGER , tramitacao.codigo é um INTEGER tbem,
Como executar só a subquery ? esse s.codigo é da subquery externa, ai fica dificil executar separado!!
se eu substituir o IN por um Exists ele roda, porém ao colocar o IN, NÃO RODA
J
jonasrn
Utilizando o IN eu posso utilizar um campo externo na busca interna ?