Boa noite amigos,
Estou com um problema…
Não entendo por que esse Criteria tá retornando um list de Objects ao invés de um List do objeto desejado.
Todas outras consultas funcionam bem.
Vejam meu código:
[code]public List agrupaGastos(Cliente cliente) {
ProjectionList pl=Projections.projectionList();
pl.add(Projections.property("id"));
pl.add(Projections.property("cliente"));
pl.add(Projections.property("usuario"));
pl.add(Projections.property("dataOperacao"));
pl.add(Projections.groupProperty("tipoTransacao"));
pl.add(Projections.sum("valor"));
Criteria criteria = this.session
.createCriteria(Transacao.class).setProjection(pl)
.add(Restrictions.and(Restrictions.eq("cliente", cliente),
Restrictions.lt("valor", new BigDecimal(0))));
return criteria.list();
}[/code]
Eu normalmente faço cast. Não sei se é gambiarra.
return (List<Transacao>)criteria.list();
Que eu saiba precisa fazer o casting para retornar corretamente
Posso aproveitar o tópico e perguntar uma coisa? Ao invés de retornar Objects, o criteria esta retornando uma lista com registros repetidos. Tenho só 1 registro na tabela, e recebo um List com 6 objetos O.o’
O que você quer retornar tem relacionamento com outras classes ?
Quando acontece isso eu geralmente coloco a seguinte parte
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
agora se você quer que só um objeto seja retornado pode chamar
return criteria.uniqueResult() ao inves de criteria.list():
Está colocando as restrições certas? Já me confundi com aqueles “ge, le” da vida e aconteceu o mesmo. Teste a sql no banco e depois reproduze-a no Criteria.
e voce também pode fazer:
criteria.list().get(0);
//ou
criteria.uniqueResult();
Obrigado pelas respostas.
Na verdade não quero um resultado único.
Quero uma lista de registros mesmo. Só que ele está duplicando estes registros.
Se eu tiver 2 registros, ele retorna 6 por exemplo…
No caso, eu tenho um registro e ele me retorna a lista com 6…
Entenderam ?
coloca o criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Resolveu o problema 
legal… obrigado
obrigado msmo 
Se alguém puder explicar o porque disso funciona eu agradeceria.rsrs
Só sei que funciona.
Acho que tem haver com os relacionamentos da consulta.
[quote=lele_vader]Que eu saiba precisa fazer o casting para retornar corretamente
[/quote]
Estranho pq mesmo fazendo o casting, eh retornado um List de Objects…
List<Transacao> lista=(List<Transacao>) criteria.list();
return lista;
Como pode? :shock:
Amigos, alguém teria alguma ideia para esse problema?? :roll: