Inner join Hibernate 2

4 respostas
D

Alguem sabe como posso fazer uma consulta com inner join entre 3 tabelas no hibernate? coisa do tipo: select pesquisa from Pesquisa pesquisa INNER JOIN pesquisa.perguntasPesquisas perguntas INNER JOIN pesquisa.perguntasPesquisas.respostasPesquisa respostas where pesquisa.codiPesq = :codiPesq order by perguntas.codiPerg

onde uma pesquisa tem varias perguntas e uma pergunta tem varias respostas? da forma como está acontece o seguinte erro:

net.sf.hibernate.QueryException: expecting 'elements' or 'indices' after: pesquisa.perguntasPesquisas.respostasPesquisa [ select pesquisa from com.simplestec.pesquisa.dados.beans.Pesquisa pesquisa, pesquisa.perguntasPesquisas perguntas, pesquisa.perguntasPesquisas.respostasPesquisa where pesquisa.codiPesq = :codiPesq ] at net.sf.hibernate.hql.PathExpressionParser.doCollectionProperty(PathExpressionParser.java:469) at net.sf.hibernate.hql.PathExpressionParser.token(PathExpressionParser.java:172)

Quando faco apenas entre pesquisa e pergunta da tudo certo, ela retorna um objeto pesquisa com todas as suas perguntas

obrigado.

4 Respostas

ricardolecheta

tente assim e me diga se funcionou :slight_smile:

select pesquisa from Pesquisa as pesquisa 
         INNER JOIN pesquisa.perguntasPesquisas as perguntas 
         INNER JOIN perguntas.respostasPesquisa as respostas 
         where pesquisa.codiPesq = :codiPesq 
         order by perguntas.codiPerg
D

Funciona nao …

could not resolve property type: respostasPesquisa

A sintaxe para joins multiplos é esta mesmo no hibernate?

ricardolecheta

o nome do relacionamento que vc colocou no mapping file de perguntas está como “respostasPesquisa”?

aparentemente está certo, deveria funcionar

D

Agora deu certo! valeu!

Mas agora o problema é outro:
Gerei os .hbm com o middlegen e as classes com o CodeGenerator. tow achando que o middlegen fez alguma coisa errada, trocou algum nome de campo, ou coisa parecida. Quando testei uma insercao de um objeto Pesquisa notei que ele tava trocando a ordem de alguns campos ao inserir uma resposta, portanto estava inserirndo errado.
Solucao: Fui nos xml e troquei a ordem de declaracao das propriedades e funcionou td certinho. Agora o mesmo problema esta acontecendo qdo faço este join entre as tres tabelas. Aqui esta o sql gerado: select pesquisa.Codi_Pesq as Codi_Pesq, pesquisa.Desc_Ques as Desc_Ques, pesquisa.Data_UlAl as Data_UlAl from Pesquisa pesquisa, Perguntas_Pesquisa per0_, Respostas_Pesquisa res1_ where pesquisa.Codi_Pesq=per0_.Codi_Pesq and per0_.Codi_Perg=res1_.Codi_Pesq and per0_.Codi_Pesq=res1_.Codi_Perg and ((pesquisa.Codi_Pesq=? )) order by per0_.Codi_Perg

Notem que no where ele ta comparando codi_perg de uma tabela com codi_pesq de outra, portanto o join nao funciona. Sabes onde posso alterar o xml para ele fazer este join corretamente

per0_.Codi_Perg=res1_.Codi_Pesq and per0_.Codi_Pesq=res1_.Codi_Perg
Criado 19 de novembro de 2003
Ultima resposta 20 de nov. de 2003
Respostas 4
Participantes 2