segunda-feira, 24 de novembro de 2008

distinct com projection

Quando usamos projection, o "criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);"
algumas vezes não funciona pois faz o distinct após a consulta ser feita, o distinct correto é esse:

...
ProjectionList p = Projections.projectionList().create();
p.add(Projections.property("c.id"), "id");
p.add(Projections.property("c.nome"), "nome");
criteria.setProjection(p);

criteria.add(Expression.in("ai.id", longs));
criteria.add(Expression.eq("c.empresa.id", empresaId));
criteria.addOrder(Order.asc("c.nome"));

criteria.setProjection(Projections.distinct(p));
...

SQL gerado:
select
distinct this_.id as y0_,
this_.nome as y1_
from
...

Nenhum comentário: