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???