Impedancia - modelagem OO

Prezados Srs

Tenho a seguinte situação: existem os objetos Empresa que possuem vários Sistemas (@ManyToMany unidirecional) e Grupo que possuem uma associação bidirecional (@ManyToMany) com empresa.
Grupo por sua vez possui uma relação bidirecional com o Usuarios (@ManyToMany).
Empresa tambem possui uma relação com sistemas, para saber quais sistemas aquela empresa comprou.

Logo com este mapeamento sao geradas as tabelas:

Sistema - SistemaEmpresa - Empresa - EmpresaGrupo - Grupo - GrupoUsuario - Usuario

Até ai tudo bem, porém agora começam os problemas:

Alguns grupos de usuarios podem ter acesso a apenas alguns sistemas e obviamente esses sistemas devem pertencer as empresas as quais esses
grupos estao relacionados.

Se eu colocar uma coleção de sistemas também em grupo resolveria o problema:

Sistema - SistemaEmpresa - Empresa - EmpresaGrupo - Grupo - GrupoUsuario - Usuario - GrupoSistema

Porem nada impede eu adicionar a um grupo, um sistema que nao esta presente
em nenhuma empresa deste grupo. Logo teria inconsistencia de dados.

Resolveria isso com chave ternaria, porém fica muito feio o modelo com akelas classes PK’s.

Alguem ja passou por algo parecido ?

abraaaaaaaaaaasssss