Consulta HQL com chaves estrangeiras

4 respostas
B

Olá, estou precisando fazer uma consulta, usando HQL, em uma tabela que possui FKs mas não sei bem como.

O caso é que tenho uma tabela chamada Transacao e uma Estabelecimento. A primeira possui uma FK que faz referência ao campo id da tabela Estabelecimento.

Preciso executar uma consulta que exiba alguns campos da tabela Transacao mas também preciso exibir o campo “nome” da tabela Estabelecimento e pra isso preciso utilizar a FK da tabela Transacao.

tentei usar a query: SELECT ts.id, ts.numeroPedido, ts.valor, ts.dataPedido, et.nome FROM Transacao ts, Estabelecimento et WHERE ts.estabelecimento = et.id

mas acho que isso não funciona em HQL. Se alguém puder me dar uma dica eu ficaria muito grato!

4 Respostas

maior_abandonado

dentro da sua classe Transacao você tem uma tributo estabelecimento certo? então você terá que fazer da seguinte forma:

mudar de

FROM Transacao ts, Estabelecimento et

para

FROM Transacao ts inner join ts.estabelecimento et

nome do seu atributo estabelecimento na classe Transação e depois o apelido…

da uma pesquisada em joins (primeiro em sql se você não conhecer, depois em hql).

B

Primeiramente muito obrigado por me responder…

Mas então, tentei fazer o que você falou e deu o JavaNullPointerException. Na verdade não entendi direito o conceito de usar o inner join.

o atributo “estabelecimento” da tabela TRANSACAO faz referência ao atributo Id da tabela ESTABELECIMENTO. Mas o que eu quero mostrar na tela é o campo Nome e não o ID. O inner Join funcionaria nesse caso?? Ele não serve pra mostraros campos de uma tabela mesmo que não tenha os iguais da outra (ou algo assim) ?? Vou pesquisar melhor.

Eu não cheguei a comentar, mas quando eu tentei fazer aquela minha consulta original, apareceu o seguinte erro:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to models.Transacao

não tenho certeza, mas acho que o campo nome do Estabelecimento está vindo como objeto e por isso ele não consegue atribuir na variavel String da tabela Transacao.

Desculpe a ignorância mas sou bem novato com HQL e projetos Web, fico meio perdido às vezes.

B

Alguém sabe me dizer se da pra fazer com Critéria ?? talvez possa ser mais fácil, pq com HQL ta bem complicado aqui

maior_abandonado

BrenoBex:
Primeiramente muito obrigado por me responder…

Mas então, tentei fazer o que você falou e deu o JavaNullPointerException. Na verdade não entendi direito o conceito de usar o inner join.

o atributo “estabelecimento” da tabela TRANSACAO faz referência ao atributo Id da tabela ESTABELECIMENTO. Mas o que eu quero mostrar na tela é o campo Nome e não o ID. O inner Join funcionaria nesse caso?? Ele não serve pra mostraros campos de uma tabela mesmo que não tenha os iguais da outra (ou algo assim) ?? Vou pesquisar melhor.

Eu não cheguei a comentar, mas quando eu tentei fazer aquela minha consulta original, apareceu o seguinte erro:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to models.Transacao

não tenho certeza, mas acho que o campo nome do Estabelecimento está vindo como objeto e por isso ele não consegue atribuir na variavel String da tabela Transacao.

Desculpe a ignorância mas sou bem novato com HQL e projetos Web, fico meio perdido às vezes.

“o atributo “estabelecimento” da tabela TRANSACAO faz referência ao atributo Id da tabela ESTABELECIMENTO”

então… achoq ue você não entendeu, não você não vai usar o nome da coluna no seu banco de dados, mas sim o nome do atributro na sua classe de entidade que esta mapeando essa tabela… é o atributo do tipo da classe Estabelecimento dentro da sua classe Transacao… e isso funciona sim, do jeito que você deixou, vai vir um Object[] para cada linha do retorno da query, sendo que cada item do array seria um item que você colocar na clausula select do seu hql (se você colocasse select tr from Transacao tr inner join fetch tr.estabelecimento where… retornaria o objeto da transação com o objeto Estabelecimento prenchido em cada linha do retorno… normalmente é mais facil de usar…).

como eu falei, estude os joins…

e sim, da para fazer com criteria sim, mas eu honestamente acho mais dificil… ^^

Criado 13 de julho de 2011
Ultima resposta 13 de jul. de 2011
Respostas 4
Participantes 2