Duvida Hibernate Criteria + DetachedCriteria

E ae Pessoal,

estou com um problema em uma consulta com criteria

estou tentando criar o seguinte sql em criteria

select b.cli_codext               vis_cli_codigo, 
       b.cli_fili                 vis_cli_filial, 
       b.cli_razaosocial          cli_razaosocial,
       b.cli_nomefantasia         nome_fantasia,
       b.cli_cidade               cidade,
       b.cli_estado               UF,
       (select count(*) 
          from visita v1
         where v1.vis_cli_codigo = b.cli_codext
           and v1.vis_cli_filial = b.cli_fili
           and v1.vis_tipovis_id = 1 ) consultiva
  from cliente b
 where (b.cli_codext, b.cli_fili) in
       (select v.vis_cli_codigo, v.vis_cli_filial
          from visita v
         where v.vis_tec_codext = 414042
           and trunc(vis_data) >= to_date('01/01/2011','dd/MM/yyyy'))
  order by cli_razaosocial 

eu ja possuo as duas consultas prontas

a primeira

  (select count(*) 
          from visita v1
         where v1.vis_cli_codigo = b.cli_codext
           and v1.vis_cli_filial = b.cli_fili
           and v1.vis_tipovis_id = 1 

DetachedCriteria subQuery1 = DetachedCriteria.forClass(Visita.class, "v")
				.createAlias("v.tipo", "tv", Criteria.INNER_JOIN)
				.add(Restrictions.eq("tv.id", new Long(1)))
				.setProjection(Projections.alias(Projections.rowCount(), "CONSULTIVA"));

e a segunda


		Criteria c = session.createCriteria(Cliente.class, "c")
                   .add(Restrictions.in("c.id", subQueryVisita.getExecutableCriteria(session).list()))
                   .addOrder(Order.asc("razaoSocial"));

mas não sei como unir as duas para representar o sql acima, eu conheco somente quando uma subquery esta na clausula where
agora desta maneira acima nao.

Preciso de uma dica de como unir as duas consultas

Cara até onde sei não é possível fazer isso com Criteria, lembro de ja ter tentado.
Talvez em HQL, mas acredito que também não funcione.
Você poderia criar uma view com o script abaixo, mapea-la e referencia-la na entidade Cliente.

select  v1.vis_cli_codigo, v1.vis_cli_filial, count(*) 
from visita v1
where  v1.vis_tipovis_id = 1 
group by v1.vis_cli_codigo, v1.vis_cli_filial

Mais como referenciar na Cliente?

[quote=ksio_thadeu]Mais como referenciar na Cliente?
[/quote]

Primeiramente você sabe como criar uma view? Caso sim, você vai mapea-la como uma entidade qualquer pois ela funciona como uma tabela no banco.
e em Cliente você teria algo assim:

@ManyToOne
@JoinColumns({
    @JoinColumn(name = "cli_codext", referencedColumnName = "vis_cli_codigo", insertable = false, updatable = false),
    @JoinColumn(name = "cli_fili", referencedColumnName = "vis_cli_filial", insertable = false, updatable = false)
})
private ViewVisita visitas;

Sim eu sei criar uma view, mais eu optei pela solucao de realizar a consulta com HQL.

Vlw, Obrigado