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!