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

ERROR 1062 (23000): Duplicate entry 'ROLE_ADMIN'

Acho que o mapeamento Usuario e Role não está certo no texto da aula. Quando tento inserir um perfil de role_admin para outro usuário, o mysql retorna o erro: ERROR 1062 (23000): Duplicate entry 'ROLE_ADMIN' for key.

Notei que na tabela de associacao USER_ROLE criada pelo Hibernate o role_admin ficou como chave primaria:

mysql> desc user_role;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| User_email | varchar(255) | NO   | MUL | NULL    |       |
| roles_name | varchar(255) | NO   | PRI | NULL    |       |
+------------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql>

Codigo da classe User:

@Entity
public class User implements UserDetails {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    private String email;
    private String name;
    private String passwd;

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

Codigo da classe Role

@Entity
public class Role implements GrantedAuthority{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    private String name;

Alguém já passou por essa parte da aula e pode me ajudar?

2 respostas
solução!

Oi Sylvio,

Não sei se está assim no curso, mas se tiver está errado, pois o relacionamento de Usuario para Role deve ser do tipo @ManyToMany, pois um usuário pode vários roles, e um mesmo role poder estar associado a mais de um usuário.

No seu caso o erro acontece porque ele está tentando inserir novamente no banco o ROLE_ADMIN, que já existe, e por isso lança exception.

Altere na classe User:

@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "user_role")
private List<Role> roles = new ArrayList<Role>();

Veja se resolve.

Muito obrigado, deu certo. No curso está OneToMany.