[RESOLVIDO] Como montar uma consulta HQL no Hibernate
8 respostasResolvido
hibernate
EduGomes
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:
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:
FROMProjetopJOINFETCHp.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ê.
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.
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.
Tentei alterar o WHERE g.grupos.id = 1
para WHERE g.projetos.id = 1
mas dai voltava a acontecer aquele outro erro anterior.
P
Solucao aceita
paulobalmer
Me confundi… na verdade é pra ser assim…
FROM Projeto p JOIN FETCH p.grupos g WHERE g.id = 1
EduGomes
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.