Erro consulta HQL

ae galera,

to tentando acessar um objeto numa consulta HQL. Olha so como tah minha query:

Query q = sessao.createQuery("from TrocaTurno t where t.situacaoProcessoIEV = :situacao AND "
+"t.periodoLetivo = :periodo AND "
+"t.vinculo.programaFormacao = :programa");

Onde o objeto vinculo pertence a minha classe trocaturno e o objeto programaFormacao pertence ao objeto vinculo, como tah ai em cima. Eu preciso fazer uma comparacao entre o objeto de programa formacao. Mas o hibernate tah dizendo que tah errado! Eu lembro que jah fiz assim antes! Alguem tem alguma sugestao?

vlw!

Qual o erro?

Ele diz que nao existe a propriedade “t.vinculo.programaFormacao”! Eu to achando que ele tah interpretando como uma variavel so!

flw!

Na sua classe TrocaTurno, como estão definidas estes tres atributos que voce faz referencia no seu hql?

Certifique-se de que a propriedade t.vinculo.programaFormacao existe na classe TrocaTurno.

na minha classe TrocaTurno eu tenho o atributo “vinculo” e na minha classe Vinculo eu tenho o atributo “programaFormacao”. Eu queria acessar “programaFormacao” a partir do hql mostrado acima

flw!

[/code]

Query q = sessao.createQuery("from TrocaTurno t, Vinculo v where t.situacaoProcessoIEV = :situacao AND "
+"t.periodoLetivo = :periodo AND "
+"v.programaFormacao = :programa");

vinculo.programaFormacao nao faz parta da sua classe TrocaTurno, entao vc nao consegue acessá-lo através dela. Por isso t.vinculo.programaFormacao nao eh encontrado.

Veja se isto funciona.

ai a query entra em conflito., como ele vai saber se eh para pegar o objeto TrocaTurno ou Vinculo? Eu tentei fazer assim:

Query q = sessao.createQuery("select t from TrocaTurno t, Vinculo v where t.situacaoProcessoIEV = :situacao AND " +
"t.periodoLetivo = :periodo AND " +
"t.vinculo = v AND " +
"v.programaFormacao = :programa");

e ainda da problema! diz q consulta tah mal formada! Como eu faco uma consulta como esta?

Coloque então um atributo na sua classe TrocaTurno que receba o valor do atributo programaFormacao da sua classe Vinculo. Dessa forma, vc nao faz referencias a duas classes.

ae galera,

Consegui resolver o problema!

Olha como eu fiz:

Criteria criteria = sessao.createCriteria(TrocaTurno.class);
			
if (situacao != null){
	criteria.add(Restrictions.eq("situacaoProcessoIEV", situacao));
}	
			
if (periodo != null) {
	criteria.add(Restrictions.eq("periodoLetivo", periodo));
}
			
if (programa != null) {
	criteria.createCriteria("vinculo").add(Restrictions.eq("programaFormacao", programa));
}
			
colecao = criteria.list();