Duvida com collection de filhos no Hibernate 3

5 respostas
andre_a_s

Senhores, tenho uma classe Professor, onde esta possui uma collection(Set) de Turmas.
Quando faço: professor.getTurmas(); ele me retorna corretamente um Set com as turmas associadas.

PERGUNTO:
Como faço para filtrar as turmas?
Por exemplo, quero pegar somente as turmas de 1º ano de um professor.
Em SQL seria algo assim:

Ok, com HQL eu consigo fazer exatamente desse jeito, mas existe algo mais sofisticado no hibernate pra isso?

5 Respostas

_fs

Você pode usar a api Criteria, que é sempre mais elegante.

Criteria criteria = session.createCriteria( Turma.class );
criteria.add( Restrictions.and(
    Restrictions.eq( "professor", professor ),
    Restrictions.eq( "ano", 1 );
) );
List< Turma > turmas = criteria.list();

Ou se precisa de filtros mais permanentes, isso aqui é bem útil:
http://www.theserverside.com/tt/blogs/showblog.tss?id=Hibernate3Filters

andre_a_s

Opa… problemas resolvidos =)
Esse ultimo link do tss é exatamente oq eu preciso, valewww

andre_a_s

Bom… problemas QUASE resolvidos…

Fiz assim:

&lt;set name="turmas" &gt; &lt;key column="professor_id" /&gt; &lt;many-to-many class="Turma" column="turma_id" /&gt; &lt;filter name="ativos" condition="informacaoAdicional.status = 'A'" /&gt; &lt;/set&gt;

O problema é q o hibernate não está interpretando “informacaoAdicional.status”.
Ele deveria entrar na minha classe e fazer algo do tipo "turma.getInformacaoAdicional().getStatus().equals(“S”)"
Existe algum tipo de eu forçar isso? Ele está procurando um campo q se chama “informacaoAdicional.status”, e é claro, este não existe.

_fs

Hm, não testei, mas tente isto:

andre_a_s

[quote=LIPE]Hm, não testei, mas tente isto:

Não rolou não… acho q vou ter q colocar uma “mini query” dentro do filter =/
Mó gambita! :evil:

Criado 28 de fevereiro de 2007
Ultima resposta 2 de mar. de 2007
Respostas 5
Participantes 2