2
respostas

Hibernate @Id no campo String não cria tabela

Na sessão onde criamos nossa tabela de Usuário e Role, usamos anotações Hibernate.

Quando eu crio minha classe Usuario e Role no curso o professor deixa o campo 'email' da classe Usuario e 'nome' da classe Role como @Id.

Quando eu subo meu servidor, no console ele aparece o create das tabelas, porém no banco ele não cria as tabelas. Se eu anotar o @Id em um campo int, ele funciona, porém em campo String não.

O que devo fazer? já tentei de tudo, e eu não queria deixar Usuario e Role com campo id atoa só para funcionar.

2 respostas

Olá Jefferson!

O Hibernate utiliza JPA. Nessa especificação é obrigatório o uso de duas annotations para mapear o seu objeto no banco: @Entity e @Id.

Por conta disso você não pode omitir o ID de uma classe/entidade.

Segue abaixo a classe de como o curso nos mostra, porém ele não cria a tabela no banco com o @Id em um campo String. No Console aparece o 'create table' normalmente, porém no banco não é criado a tabela. Toda vez que sobe a aplicação ele diz que criou a tabela, mas não cria.

@Entity
public class Usuario implements UserDetails{

    private static final long serialVersionUID = 1L;

    @Id
    private String email;
    private String nome;
    private String senha;

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

     //Métodos e outros....
    //Getter's and Setter's...

}

Para criar a tabela eu preciso criar o @Id em um campo int, long etc.. Segue abaixo.

@Entity
public class Usuario implements UserDetails{

    private static final long serialVersionUID = 1L;


    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String email;
    private String nome;
    private String senha;

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


    //Métodos e outros....
    //Getter's and Setter's...

}

Quero criar a tabela de acordo com o que está no curso, em um campo String, como faço?

Estou utilitando o banco MySQL 8.0.13.