Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Mapeamento JPA Usuario e Role

Para teste eu fiz o seguinte Mapemento:

Usuario:

    @OneToMany(fetch = FetchType.EAGER, mappedBy="usuario")
    private List<Role> roles = new ArrayList<>();

Role:

@ManyToOne()
    private Usuario usuario;

O mapeamento ficou como eu queria, mas não funcionou, alguém pode me dizer por que?

7 respostas

Boa tarde, David! Como vai?

Esse mapeamento não funcionou pq está incorreto! Como vc pode ver no vídeo da aula aos 16:05, é mostrada a forma correta de mapear o relacionamento!

Além disso, observe que o instrutor mapeia somente a classe Usuario!

Qualquer coisa é só falar!

Grande abraço e bons estudos!

.....

.....

Bom dia Gabriel,

Obrigado pela ajuda, mas o que eu quis dizer com minha duvida é que, o mapeamento que o professor fez, gerou uma tabela Usuario_Role, e eu tentei fazer somente colocar o Id da tabela Usuario direto na tabela Role para evitar um relacionamento a mais, mas não deu certo, essa erá minha duvida, o security de alguma maneira não aceitou esse relacionamento mas quando eu recupero o usuário do banco vem com a Role, porque não deu certo?

solução!

Bom dia, David! Como vai?

Então, se vc fizer do jeito que está querendo, vai implicar que só poderemos ter 1 usuário com a role "admin", 1 usuário com a role "usuario_comum", 1 usuário com a role "visitante". Ou seja, provavalmente não é o que vc quer!

A tabela Usuario_Role que é criada se faz necessária pq o relacionamento é de n:m de modo que um mesmo usuário possa ter várias roles e uma mesma role possa ser atribuída a vários usuários, fazendo com que, por exemplo, possamos ter mais de um "admin", mais de um "usuario_comum", mais de um "visitante" e assim por diante! Justamente como aconte na maioria dos sistemas.

Gabriel,

Então eu acho que entendi errado o mapeamento que eu fiz, eu estava pensando que ele iria duplicar o valor da Role para Ids diferentes, Agora esta claro, muito obrigado pela ajuda.

Nem poderia duplicar pq o nome da role é chave primária! E, mesmo que não fosse chave primária e vc duplicasse o valor da role como vc queria, esse seria um caso clássico de uma tabela não normalizada dentro do modelo entidade relacionamento! A normalização é importante pq visa a organização de um projeto de banco de dados para reduzir a redundância de dados, aumentar a integridade de dados e o desempenho.

Por fim, sempre que tiver qualquer dúvida é só perguntar aqui no fórum!

Grande abraço e bons estudos!