Consegui iniciar, mas o GroupBy nao está funcionando
public List<Imagem> search(String busca) {
Criteria c = session.createCriteria(Imagem.class, "i");
Criteria subCriteria = c.createCriteria("tags", "t");
Criterion c1 = Restrictions.eq("t.tag", busca);
Criterion c2 = Restrictions.ilike("i.titulo", busca, MatchMode.ANYWHERE);
Criterion c3 = Restrictions.or(c1, c2);
c.add(c3);
//c.setProjection(Projections.groupProperty("i.id"));
return c.list();
}
Com este codigo gera o seguinte sql:
select
this_.id as id0_1_,
this_.altura as altura0_1_,
this_.caminho as caminho0_1_,
this_.formato as formato0_1_,
this_.largura as largura0_1_,
this_.tamanho as tamanho0_1_,
this_.titulo as titulo0_1_,
tags3_.imagens_id as imagens1_,
t1_.tag as tags2_,
t1_.tag as tag1_0_
from
Imagem this_
inner join
Imagem_Tag tags3_
on this_.id=tags3_.imagens_id
inner join
Tag t1_
on tags3_.tags_tag=t1_.tag
where
(
t1_.tag=?
or lower(this_.titulo) like ?
)
e quando entao descomento o c.setProjection(Projections.groupProperty("i.id"));
para agrupar por id... o sql fica assim:
select
this_.id as y0_
from
Imagem this_
inner join
Imagem_Tag tags3_
on this_.id=tags3_.imagens_id
inner join
Tag t1_
on tags3_.tags_tag=t1_.tag
where
(
t1_.tag=?
or lower(this_.titulo) like ?
)
group by
this_.id
Todos os outros atributos antes que ficavam no select somem, e entao só me é retornado o campo ID..
será que estou usando de modo correto o groupProperty ?