wood,
Alguém com maior conhecimento em HQL pode dar uma solucão mais eficiente e “bonita” usando só HQL, provavelmente.
Entretanto, tive problema semelhante. Optei por deixar a consulta na tabela (no seu caso “questao_has_palavra_chave”) em uma function no banco. Na HQL, só seria necessário usar a tabela mapeada, usando a function como filtro.
É preferível adotar outra solucão, puramente Java, mas nesse meu caso, não prendi nenhuma regra de negócio no meu banco, é uma simples consulta com predicado, além de ter deixado o lado Java bem mais simples.
Flws!
Bom dia wood,
Andei me informando sobre o assunto. Depois que vc levantou a questão tb fiquei interessado. Mas infelizmente, na documentacao nao consta nada sobre esses casos.
Concluo que não seja possível usar entidades não mapeadas como classe em HQLs. Isso de certa forma, justifica a existência de querys nativas. Creio que será uma forma de tentar resolver o problema.
Flws!
Olá pessoal,
Estou tentando transformar uma query em SQL para HQL mas não estou conseguindo.
Cenário:
Tabela questão, tabela palavra_chave, tabela questao_has_palavra_chave.
Uma questão tem uma ou mais palavras-chave.
A tabela questao_has_palavra_chave não tem mapeamento, pois ela não possui nenhum atributo.
A inserção de todas as entidades está OK, o problema acontece só nessa query que eu quero fazer.
Problema:
O problema é transformar a SQL em HQL.
Eu quero retornar todas as questões que tem uma palavra-chave. Para fazer isso, na SQL, eu faço uma pesquisa na tabela questao_has_palavra_chave e verifico quais são as questões. No hibernate, como essa tabela não está mapeada, eu não consigo fazer essa pesquisa.
A pergunta: Tem como eu fazer essa consulta sem fazer o mapeamento desta tabela intermediária (questao_has_palavra_chave)? Como?
Segue a consulta SQL.
SELECT * FROM questao q
WHERE q.id_questao in
(SELECT qpc.id_questao FROM questao_has_palavra_chave qpc
WHERE qpc.id_palavra_chave in
(SELECT pc.id_palavra_chave FROM palavra_chave pc
WHERE pc.palavra = 'Rede'
)
)
Olá schmidt, obrigado pela resposta.
Mas o que eu estou querendo mesmo, é saber como fazer em HQL. Até pra que em uma outra situação eu possa avaliar o que é mais viável.
Agora mesmo, estou querendo fazer outra consulta ao banco que envolve esta tabela. Se eu não souber como fazer utilizando hibernate fica ruim ficar escrevendo funções para cada consulta que envolva esta ou outra tabela do mesmo tipo.
Como passar uma consulta N:N que envolva as 3 tabelas (sendo que somente duas estão mapeadas) de SQL para HQL?
Abrç