1
resposta

Erro no cadastro de produtos

Pessoal, bom dia! Tentei inserir dois novos produtos, mas estou com um problema: toda vez que cadastro novos produtos eles são cadastrados com ID fora sequencia. No código abaixo o produto Xiaomi Redmi foi cadastrado com ID 2, o produto PS5 foi cadastrado com ID 5, e o produto Macbook foi cadastrado com ID 7. Copiei o código de Produto.java apenas, mas se for necessario outros trechos/arquivos, eu atualizo o post. Obrigado!

    private static void cadastrarProduto() {
        Categoria celulares = new Categoria("CELULARES");
        Categoria videogames = new Categoria("VIDEOGAMES");
        Categoria informatica = new Categoria("INFORMATICA");


        Produto celular = new Produto("Xiaomi Redmi","Muito legal", new BigDecimal("800"), celulares);
        Produto videogame = new Produto("PS5","PlayStation 5", new BigDecimal("900"), videogames);
        Produto macbook = new Produto("Macbook","Macbook pro reti", new BigDecimal("700"), informatica);

        Cliente cliente = new Cliente("Rodrigo","123456");

        EntityManager em = JPAUtil.getEntityManager();

        ProdutoDAO prodDAO  = new ProdutoDAO(em);
        CategoriaDAO categDAO  = new CategoriaDAO(em);
         ClienteDAO clienteDao = new ClienteDAO(em);

        em.getTransaction().begin();

        categDAO.cadastrar(celulares);
        prodDAO.cadastrar(celular);
        clienteDao.cadastrar(cliente);
        categDAO.cadastrar(videogames);
        prodDAO.cadastrar(videogame);
        categDAO.cadastrar(informatica);
        prodDAO.cadastrar(macbook);


        em.getTransaction().commit();
        em.close();



    }
//Produto
@Entity
@Table(name = "produtos")
public class Produto {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private Long id;
    private String nome;
    @Column(name = "desc") 
    private String descricao;
    private BigDecimal preco;
    private LocalDate dataCadastro = LocalDate.now();


    @ManyToOne 
    private Categoria categoria;

    public Produto() {
    }


    public Produto(String nome, String descricao, BigDecimal preco, Categoria categoria) {
        super();
        this.nome = nome;
        this.descricao = descricao;
        this.preco = preco;
        this.categoria = categoria;
    }

    public LocalDate getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(LocalDate dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Long getId() {
        return id;
    }

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

    public String getNome() {
        return nome;
    }

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

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public BigDecimal getPreco() {
        return this.preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

}
1 resposta

Oi Gabryel,

Os id são gerenciados pelo próprio banco de dados e quando excluimos algum registro, o banco não "preenche" aquele id que foi removido anteriormente. Com isso pode acontecer de ter ids fora de ordem mesmo.

Bons estudos!