[RESOLVIDO] Criteria SubSelect

Ola Galera alguem pode me ajudar com o criteria estou tentando fazer um subselect mas nao to sabendo como fazer.

abaixo irei posta o codigo do criteria e depois como eu gostaria que ficasse em sql.

[code]public Map<String, List> pesquisaLaudaCevs(List acompanhamentos) {
Session session = getSession();
Criteria criteria = null;
//Criteria subCriteria = null;
Map<String, List> map = new HashMap<String, List>();

	for(Acompanhamento acomp : acompanhamentos) {
									
		DetachedCriteria dc = DetachedCriteria.forClass(Acompanhamento.class);
		dc.createAlias("cevsSolicitacaoIdentificacao", "cevsSolicitacaoIdentificacao");			
		dc.createAlias("cevsSolicitacaoIdentificacao.codigoCevs", "codigoCevs");
		dc.setProjection(Projections.distinct(Projections.property("codigoCevs.codigoCevs")));	
		dc.add(Restrictions.like("cevsSolicitacaoIdentificacao.protocolo", acomp.getCevsSolicitacaoIdentificacao().getProtocolo()));
		//map.put(acomp.getCevsSolicitacaoIdentificacao().getProtocolo(), (List<CevsCodigo>) criteria.list());
		
		criteria = session.createCriteria(Acompanhamento.class);
		criteria.createAlias("cevsSolicitacaoIdentificacao", "cevsSolicitacaoIdentificacao");
		criteria.createAlias("cevsSolicitacaoEquipamento", "cevsSolicitacaoEquipamento");
		criteria.createAlias("cevsSolicitacaoEquipamento.codigoCevs", "codigoCevs");			
		criteria.setProjection(Projections.distinct(Projections.property("codigoCevs.codigoCevs")));			
		criteria.add(Restrictions.like("cevsSolicitacaoIdentificacao.protocolo", acomp.getCevsSolicitacaoIdentificacao().getProtocolo()));			
		map.put(acomp.getCevsSolicitacaoIdentificacao().getProtocolo(), (List<CevsCodigo>) criteria.list());			
		
	}
	return  map;
}[/code]

select distinct codigocevs3_.codigo_cevs as y0_, (select distinct codigocevs2_.codigo_cevs as y0_ from acompanhamento this_ inner join cevs_solicit_identificacao cevssolici1_ on this_.cevs_solicit_identificacao_id=cevssolici1_.cevs_solicit_identificacao_id inner join cevs_codigo codigocevs2_ on cevssolici1_.cevs_codigo_id=codigocevs2_.cevs_codigo_id where cevssolici1_.protocolo like '008873/2009-N01') from acompanhamento this_ inner join cevs_solicit_equipamento cevssolici2_ on this_.cevs_solicit_equipamento_id=cevssolici2_.cevs_solicit_equipamento_id inner join cevs_codigo codigocevs3_ on cevssolici2_.cevs_codigo_id=codigocevs3_.cevs_codigo_id inner join cevs_solicit_identificacao cevssolici1_ on this_.cevs_solicit_identificacao_id=cevssolici1_.cevs_solicit_identificacao_id where cevssolici1_.protocolo like '008873/2009-N01'

abs a Todos…

Não consegui visualizar onde você vincula a instancia dc a sua Criteria, mas você pode encontrar mais detalhes de como usar Detached Criteria em 15.8. Detached queries and subqueries

Outra dica seria usar HQL, por ser mais simples de implementar queries desse tipo…
Qual seria o código final SQL esperado?

Acabei resolvendo de uma outra forma, acredito q nao seja a forma mais correta mas no momento foi o que deu pra fazer ate eu melhora-la

public Map<String, List<CevsCodigo>> pesquisaLaudaCevs(List<Acompanhamento> acompanhamentos) {
		Session session = getSession();
		Criteria criteria = null;		
		Map<String, List<CevsCodigo>> map = new HashMap<String, List<CevsCodigo>>();

		for(Acompanhamento acomp : acompanhamentos) {
						
			criteria = session.createCriteria(Acompanhamento.class);			
			//DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Acompanhamento.class);
			criteria.createCriteria("cevsSolicitacaoEquipamento", "cevsSolicitacaoEquipamento", criteria.LEFT_JOIN);
			criteria.createCriteria("cevsSolicitacaoIdentificacao", "cevsSolicitacaoIdentificacao", criteria.LEFT_JOIN);			
			criteria.createCriteria("cevsSolicitacaoEquipamento.codigoCevs", "codigoCevs", criteria.LEFT_JOIN);			
			criteria.createCriteria("cevsSolicitacaoIdentificacao.codigoCevs", "codigoCevs2", criteria.LEFT_JOIN);
			criteria.setProjection(Projections.distinct(Projections.property("codigoCevs.codigoCevs")));
			ProjectionList pl = Projections.projectionList();
			pl.add(Projections.groupProperty("codigoCevs.codigoCevs"));
			pl.add(Projections.groupProperty("codigoCevs2.codigoCevs"));
			criteria.setProjection(pl);
			criteria.add(Restrictions.like("cevsSolicitacaoIdentificacao.protocolo", acomp.getCevsSolicitacaoIdentificacao().getProtocolo()));
			map.put(acomp.getCevsSolicitacaoIdentificacao().getProtocolo(), (List<CevsCodigo>) criteria.list());
									
			 
		}
		return  map;
	}

Obrigado.