Como fazer uma associação a duas classes no hibernate

Estou com uma dificuldade em fazer essa classe funcionar da maneira que desejo. gostaria de uma luz para saber como devo fazer a classe usuário. abaixo segue a explicação do problema:

Tenho dois objetos:

[code]@Entity
class Recurso {
@Id
@GeneratedValue
private Long Id;
private String descricao;
private String path;

}

@Entity
Class Usuario {
@Id
@GeneratedValue
private Long id;

private String nome;
private String login;
Private String senha;
@ManyToMany
private Set<Recurso> permissoes;
@ManyToMany
private Set<Empresa> empresas;


}[/code]

dessa forma eu obtenho as permissões que o usuario possui.
Agora quero acrescentar a nocao de empresa.

[code]@Entity
class empresa {
@Id
@GeneratedValue
private Long Id;
private String nome;
@Embedded
private CNPJ cnpj;


}[/code]

O que eu gostaria agora é que as permissões estejam associadas a empresa. eu só consegui fazer assim:
acrescentar à classe Usuario o atributo empresa:
@ManyToMany
private Set empresa;

Dessa forma, se eu colocasse 3 itens em permissoes. e 2 em empresa, o usuario teria as mesmas permissoes para as duas empresas
e o que eu quero é ter as permissoes diferenciadas para cada empresa

Exemplo de como eu gostaria de funcione;
empresas: empA, empB, empC, empD
recursos: rec1, rec2, rec3, rec4

permissoes para o usuário :
empA[rec1, rec4], empC[rec2, rec4]

Um usuário pode ter por exemplo duas empresas, cada uma dessas duas empresas apresentam permissões diferentes e não podem nesse caso ser repetidas de acordo com o usuário?

Eu creio que para validar essa regra a melhor forma é fugir do escopo do POJO e passar esse issue para uma classe de regra de negocio, dessa forma na hora que fosse atribuir empresas e recursos, o sistema verificaria as empresas associadas àquele usuário e no caso não deixaria que duas ou mais empresas tivessem o mesmo recurso.

Na verdade o usuario pode ter recursos iguais para empresas diferentes;
mas,o que quero é que eu possa acrescentar/retirar recursos do usuario para uma dada empresa, sem que se modifique seus recursos noutras empresas à ele associadas.

se fosse trabalhar pensando em BD eu teria uma tabela com os seguintes atributos :CodUsuario, codRecurso, codEmpresa

Acredito que uma classe associativa viria a calhar nesse caso.
Poderia ser, por exemplo, uma classe Permissão, associando Pessoa a Empresa. Essa classe teria um Set de Recursos.
Grosso modo, sem annotations:

class Permissao {
	private Usuario usuario;
	private Empresa empresa;
	private Set<Recurso> recursos;
	
	...
}

Dessa forma, a cada empresa associada ao usuário, tu poderia atribuir quantos recursos tu quisesse, sem afetar as permissões para as outras empresas.