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

3 respostas
jeffersonbezerra

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:

@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;
...
}

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

@Entity
class empresa {
    @Id
    @GeneratedValue
    private Long Id;
    private String nome;
    @Embedded
    private CNPJ cnpj;
    
...
}

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]

3 Respostas

Grinvon

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.

jeffersonbezerra

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

marciowerner

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.

Criado 27 de junho de 2008
Ultima resposta 28 de jun. de 2008
Respostas 3
Participantes 3