Erro consulta HQL

9 respostas
A

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!

9 Respostas

K

Qual o erro?

A

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

flw!

K

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

G

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

A

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]

K
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.

A

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?

K

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.

A

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();
Criado 4 de outubro de 2006
Ultima resposta 5 de out. de 2006
Respostas 9
Participantes 3