4
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.

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.

4 respostas

Se vc não definir uma estratégia para a geração dos ids ele usará como default o GenerationType.AUTO que vai gerar ids dos tipos long, short ou int. Vc pode adicionar o código abaixo para gerar com strings =]

@GeneratedValue(generator = “UUID”)
    @GenericGenerator(
        name = “UUID”,
        strategy = “org.hibernate.id.UUIDGenerator”,
    )

Caique, muito obrigado, vou testar, mas eu fiquei com isso na cabeça pois no curso ele cria normalmente somente com o @Id, ele não configura um Generator para String, ele só coloca a anotação, não é estranho?

Ainda não vi como é feito no vídeo, mas vou dar uma olhada e dou um retorno, eu aprendi dessa forma que enviei =], mas deve ter algum motivo pra ser feito da forma que está hehe.

Então Caique, é o curso de Spring MVC 2, ele cria exatamente da mesma forma que eu estou criando, é um copy/paste, porém no dele cria somente com @Id em cima de uma 'String email'.

Eu já realizei vários testes, versões das libs, recriar novamente, re-build, etc... ele só cria a tabela no banco com @Id em um int, long etc.. ou dessa forma que você mencionou, porém do jeito que o curso aborda ele não cria.

Queria saber como eles conseguiram criar no curso, sendo que até mesmo o banco é o mesmo que eu estou usando rsrsrsr

Obrigado pelo retormo Caique.