Hibernate retorna Lista de Object

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 :slight_smile:

legal… obrigado
obrigado msmo :slight_smile:

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: