Dúvida sobre como realizar um tipo de consulta agrupando e contando

Como fazer uma busca assim, usando criteria?

Tenho uma classe de Resgates

nessa classe, tenho quem foi o responsável pelo resgate, o responsável deste responsável, e qual status do resgate (ex: 1 - pendente; 2 - concluido).

Se eu quisesse fazer uma busca para agrupar todos os responsáveis em uma posição, e nas outras, a contagem da incidência dos pendentes e dos concluídos, como eu poderia fazer?

Pq atualmente eu faço assim:

public List<Resgates> contaPendencias() { Criteria criterio = getSession().createCriteria(Resgates.class) .add(Restrictions.ne("statusAtual", Long.parseLong("99"))) //concluídos .add(Restrictions.ne("statusAtual", Long.parseLong("98"))) //cancelados .add(Restrictions.ne("statusAtual", Long.parseLong("97"))) //iniciado .add(Restrictions.ne("statusAtual", Long.parseLong("96"))) //devolvido .add(Restrictions.ne("statusAtual", Long.parseLong("100"))) //contabilizar .add(Restrictions.ne("statusAtual", Long.parseLong("101"))); //exportado ProjectionList list = Projections.projectionList(); list.add(Projections.groupProperty("ujaResp"), "nomeDaUja"); list.add(Projections.count("ujaResp"), "quantidadePendencias"); criterio.setProjection(list); criterio.setResultTransformer(new AliasToBeanConstructorResultTransformer(ContaPendencias.class.getConstructors()[0])); return criterio.list(); }

e a classe ContaPendencias:

[code] private final Object nomeDaUja; //na verdade vem o prefixo
private final Object quantidadePendencias;

public ContaPendencias(Object nomeDaUja, Object quantidadePendencias) {  
    this.nomeDaUja = nomeDaUja;  
    this.quantidadePendencias = quantidadePendencias;  
}

public Object getNomeDaUja() {
	return nomeDaUja;
}

public Object getQuantidadePendencias() {
	return quantidadePendencias;
}  [/code]

Ai me vem um arraylist de objetos preenchidos em [0] e [1] mas não consigo separar por cada tipo de status em seu respectivo responsável

o SQL da minha busca seria esse:

select
Responsavel,
sum(case status when 1 then 1 else 0 end) as Pendentes,
sum(case status when 2 then 1 else 0 end) as Concluidos
from Tabela
group by Responsavel

[quote=rmaragno]o SQL da minha busca seria esse:

select
Responsavel,
sum(case status when 1 then 1 else 0 end) as Pendentes,
sum(case status when 2 then 1 else 0 end) as Concluidos
from Tabela
group by Responsavel[/quote]
Esse é a solução ou é uma consulta que você tentou fazer e não foi?

Você poderia fazer assim:

select count(0), statusAtual from Resgates where .... group by status

funciona no MYSQL

select Responsavel, sum(case statusAtual when 1 then 1 else 0 end) as Pendentes, sum(case statusAtual when 2 then 1 else 0 end) as Concluidos from Resgates group by Responsavel

O problema, que eu não sei como fazer isso no hibernate… nem com criteria API nem de outra forma.

alguem?