[RESOLVIDO] Como montar uma consulta HQL no Hibernate

Olá pessoal.
Estou atualmente trabalhando com java e utilizando o hibernate. Porém agora me surgiram dúvidas na hora de montar uma HQL.
Tenho uma relação ManyToMany, entre a tabela grupo e a tabela projeto, onde então foi gerada uma tabela de relação chamada many_grupo_has_many_projeto.
Está é minha consulta SQL:

Funciona perfeitamente no banco de dados, porém no hibernate não. Já pesquisei bastante e entendi que o hibernate utiliza HQL para fazer consultas e não o SQL. Então já alterei essa consulta inumeras vezes porém sem sucesso. Acabo sempre recebendo o seguinte erro:

A minha dúvida é, oque eu preciso alterar nesta consulta para que ela funcione ?

Essa é minha entidade Projeto:

A HBM do projeto:

Essa é minha entidade Grupo:

E a HBM do grupo:

Estou desde ontem em função disso, já li bastante, inclusive os manuais do hibernate, porém não estou conseguindo resolver essa parte.

Desde já agradeço.
Abraços.

Bom dia!

Normalmente, você só deve selecionar o Projeto, e quando vc precisar acessar os grupos, o Hibernate consulta sozinho pra vc… mas para isso, você precisa anotar o atributo grupo com a anotação Lazy. Se você quer garantir que os grupos já sejam carregados do banco, o correto seria fazer uma HQL assim:

FROM Projeto p
     JOIN FETCH p.grupo

Na verdade, o fato de você usar Hibernate ou qualquer implementação de JPA te faz não se preocupar muito com a consulta que vai unir as entidades, pois o Hibernate faz isso pra você.

Abraço

Paulo Balmer
Academia da Programação
E-book Java para Iniciantes

Olá.
O HQL que você me indicou funcionou de certa forma, a questão é que ele me trouxe todos os projetos que tenho na tabela que faz o relacionamento entre Grupo e Projeto.

combo

No caso oque estou tentando fazer é que popule o combobox de projetos conforme o grupo selecionado no combobox anterior.
Usei o HQL que você me indicou e tentei adicionar um WHERE que filtrava pelo ID do Grupo, mas sem sucesso.

WHERE

Isso me retoronou o seguinte erro:

Ainda assim, obrigado. A dica que me deu já ajudou a esclarecer minha ideias.

abraço

no HQL você não usa os nomes de coluna do banco, e sim os atributos do java… então tenta fazer assim:

WHERE p.grupo.id = 1

Ja havia percebido isso, porém ainda assim ele me retorna o seguinte erro :

Não consigo identificar o problema.

Opa! É verdade! Grupos é uma coleção, e possui varios objetos, e não tem como acessar o id diretamente… tenta fazer assim:

FROM Projeto p JOIN FETCH p.grupos g WHERE g.grupo.id = 1

Desta forma acontece este erro:

Tentei alterar o WHERE g.grupos.id = 1
para WHERE g.projetos.id = 1
mas dai voltava a acontecer aquele outro erro anterior.

Me confundi… na verdade é pra ser assim…

FROM Projeto p JOIN FETCH p.grupos g WHERE g.id = 1

Agora sim.
Nossa eu estava tão sobrecarregado com esse problema que nem me passou pela cabeça tentar dessa forma.
Muito obrigado pela ajuda paulo, realmente me ajudou demais, além de que consegui entender melhor algumas funções do hibernate.

Obrigado mesmo.

abraços