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

@GeneratedValue não está gerando id do autor

Olá pessoal,

Estou fazendo o exemplo do curso digitando todos os códigos e adaptando um pouco o domínio do problema para não fazer exatamente o que já foi feito no curso. Pois bem, meu problema é que apesar de parecer tudo correto quando comparo com o projeto do curso, a classe autor não está tendo seu atributo Id gerado automaticamente. Sei que no o curso não é sobre JPA, mas não estou entendendo porque no projeto pronto funciona e quando tentei reproduzir aqui não.

Abaixo a minha classe autor (note que houve uma extensão no dominio, mas em geral continua muito semelhante ao que é feito no curso).

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Autor {

    @Id    
    @GeneratedValue
    private Integer id;

    private String nome;
    private String email;
    private String endereco;
    private String telefone;
    private String qualificacao;
    private String CPF;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getQualificacao() {
        return qualificacao;
    }

    public void setQualificacao(String qualificacao) {
        this.qualificacao = qualificacao;
    }

    public String getCPF() {
        return CPF;
    }

    public void setCPF(String cPF) {
        CPF = cPF;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

Abaixo a autorBean:

import javax.faces.bean.ManagedBean;

import br.edu.univasf.minisgep.dao.DAO;
import br.edu.univasf.minisgep.modelo.Autor;

@ManagedBean
public class AutorBean {

    private Autor autor = new Autor();

    public Autor getAutor() {
        return autor;
    }

    public void gravar() {
        System.out.println("Gravando autor " + this.autor.getNome() + "ID do autor adicionado = " + this.autor.getId());

        new DAO<Autor>(Autor.class).adiciona(this.autor);

        autor = new Autor();
    }
}

No System.out acima, recebo null no autor.getId(). Os jars do hibernate, mysql e etc são os mesmos do projeto original. Alguém pode me ajudar a entender o que deu de errado ?

2 respostas
solução!

Oi Daniel,

O ID somente vai ser gerado quando o objeto autor for gravado no banco, ou seja, após a linha que chama a classe Dao:

public void gravar() {
    new DAO<Autor>(Autor.class).adiciona(this.autor);

    //aqui ele ja vai ter id, pois ja foi gravado no BD
    System.out.println("Gravando autor " + this.autor.getNome() + "ID do autor adicionado = " + this.autor.getId());    

    autor = new Autor();
}

Olá Rodrigo,

De fato, sou iniciante nestas tecnologias e acabei me confundindo.

Muito obrigado por sua esclarecimento!