Hibernate retorna Lista de Object

11 respostas
prog.tiago

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:

public List<Transacao> 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();
	}

11 Respostas

ErickRAR

Eu normalmente faço cast. Não sei se é gambiarra.

return (List<Transacao>)criteria.list();
lele_vader

Que eu saiba precisa fazer o casting para retornar corretamente

d34d_d3v1l

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’

lele_vader

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():

ErickRAR

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();
d34d_d3v1l

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 ?

lele_vader

coloca o criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

d34d_d3v1l

Resolveu o problema :slight_smile:

legal… obrigado
obrigado msmo :slight_smile:

lele_vader

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.

prog.tiago

lele_vader:
Que eu saiba precisa fazer o casting para retornar corretamente

Estranho pq mesmo fazendo o casting, eh retornado um List de Objects…

List<Transacao> lista=(List<Transacao>) criteria.list();
		return lista;

Como pode? :shock:

prog.tiago

Amigos, alguém teria alguma ideia para esse problema?? :roll:

Criado 28 de junho de 2012
Ultima resposta 29 de jun. de 2012
Respostas 11
Participantes 4