Query no Hibernate

Eu tenho as classes Usuario, Grupo, Permissao e ItemMenu.
Ao logar no sistema será mostrado no menu apenas os ItemMenu que o usuario logado tem permissão. Mas o usuario pode estar dentro de um grupo, portanto ele poderá ver os itens do menu que o Grupo tem permissão também. Eu tenho as seguintes tabelas abaixo:

Usuario ---- Usuario_permissao ------ permissao
| | |
| | |
| permissao----itemenu_permissao
| | |
| grupo_permissao |
| | Itemmenu
| |
usuario_grupo — grupo

Sem o hibernate eu resolveria o problema com a seguinte query:

SELECT itm.nome_parent, itm.nome, itm.location, itm.ordem, itm.action
FROM itemmenu itm, itemmenu_permissao tmp
WHERE itm.id = tmp.itemmenu_id
AND (tmp.permissao_id
IN(SELECT grp.permissao_id FROM grupo_permissao grp WHERE grp.grupo_id
IN(SELECT grupo_id FROM usuario_grupo WHERE usuario_id = 1))
OR tmp.permissao_id IN(SELECT usp.permissao_id FROM usuario_permissao usp
WHERE usp.usuario_id = 1)) ORDER BY ordem

Qual a melhor maneira de fazer esse procedimento usando o Hibernate ?? Alguem tem alguma sugestão ?? Como montar uma query no Hibernate para ter o mesmo resultado desta acima???

Cara, coloca o esquema dentro das tags [ code]seucodigo[ /code], assim ele ficará endentado e, portanto, muito melhor de entender os relacionamentos.

Mesmo assim, o Hibernate possue a cláusula IN. Pode ler mais sobre ela em
%HIBERNATE_HOME%/doc/reference/en/html/queryhql.html