Bom dia a todos!
Tenha as seguinte entidades:
public class Imagem {
private Integer id;
private Evento evento;
private Set<Classificador> classificadores = new HashSet();
...
}
public class Classificador {
private Integer id;
private String nome;
private Set<Imagem> imagens = new HashSet();
...
}
public class Evento {
private Integer id;
private Set imagens = new HashSet();
private String descricao;
private Date data;
...
}
devidamente mapeados com os hbms:
<class name="bean.Imagem">
<id name="id" column="id">
<generator class="native"/>
</id>
<many-to-one name="evento" class="bean.Evento" not-null="true"/>
<set name="classificadores" table="ImagemClassificada" inverse="true">
<key column="imagem"/>
<many-to-many column="classificador" class="bean.Classificador"/>
</set>
</class>
<class name="bean.Classificador">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="nome"/>
<set name="imagens" table="ImagemClassificada">
<key column="classificador"/>
<many-to-many column="imagem" class="bean.Imagem"/>
</set>
</class>
<class name="bean.Evento">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="descricao"/>
<property name="data"/>
<set name="imagens" inverse="true" cascade="save-update">
<key column="evento"/>
<one-to-many class="bean.Imagem"/>
</set>
</class>
O que quero é obter instancias de Imagem por evento e classificador. Consigo retornar os classificadores de uma imagem “imagem.getClassificadores()”, as imagens de um classificador “classificador.getImagens()”, as imagens que casam com uma coleção de eventos:
public static List<Imagem> list(List<Evento> eventos) {
...
Criteria criteria = session.createCriteria(Imagem.class);
criteria.createAlias("evento", "evento");
criteria.add( Restrictions.in("evento", eventos) );
imagens = criteria.list();
...
}
O que não estou conseguindo é retornar as imagens em que os seus classificadores contenham uma dada coleção de classificadores. Exemplo:
classificadores -> c1, c2, c3, c4, c5
imagens -> img1, img2, img3
(img1 -> c1, c2, c3, c4), (img2 -> c1, c2, c3), (img3 -> c1, c4)
Digamos que eu queira as imagens que tenham como classificadores c1 e c4, deveria retornar (img1 e img3). Para a coleção de classificadores c2 e c4, deveria retornar (img1). Para a coleção de classificadores c1, deveria retornar (img1, img2 e img3).
Como resolvo isto?
Muito obrigado pela atenção amigos.
