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

produto is null

Depois que eu adicionei mais produtos em popularBancoDeDados(), quando rodo o programa dá esse erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e o codigo de onde ele reclama está assim:

6 respostas

Oi!

Faltou enviar o código

Opa, esse é o da ItemPedido:

public class CadastroDePedido {

    public static void main(String[] args) {
        popularBancoDeDados();
        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        ClienteDAO clienteDAO = new ClienteDAO(em);

        Produto produto = produtoDAO.buscarPorId(1l);
        Produto produto2 = produtoDAO.buscarPorId(2l);
        Produto produto3 = produtoDAO.buscarPorId(3l);
        Cliente cliente = clienteDAO.buscarPorId(1l);

        em.getTransaction().begin();

        Pedido pedido = new Pedido(cliente);
        pedido.adicionarItem(new ItemPedido(10, pedido, produto));
        pedido.adicionarItem(new ItemPedido(40, pedido, produto2));

        Pedido pedido2 = new Pedido(cliente);
        pedido2.adicionarItem(new ItemPedido(2, pedido, produto3));

        PedidoDAO pedidoDAO = new PedidoDAO(em);
        pedidoDAO.cadastrar(pedido);
        pedidoDAO.cadastrar(pedido2);



        em.getTransaction().commit();

        BigDecimal totalVendido = pedidoDAO.valorTotalVendido();
        System.out.println("Valor total: " + totalVendido);

        List<Object[]> relatorio = pedidoDAO.relatorioDeVendas();
        for (Object[] obj : relatorio) {
            System.out.println(obj[0]);
            System.out.println(obj[1]);
            System.out.println(obj[2]);
        }

    }

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


        Produto celular = new Produto("RedMi Note 12", "Muito legal", new BigDecimal("800"), celulares);
        Produto videogame = new Produto("PS5", "PLAYSTATION 5", new BigDecimal("2500"), videogames);
        Produto notebook = new Produto("Macbook", "Macbook pro", new BigDecimal("6000"), informatica);

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

        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        CategoriaDAO categoriaDAO = new CategoriaDAO(em);
        ClienteDAO clienteDAO = new ClienteDAO(em);

        em.getTransaction().begin();

        categoriaDAO.cadastrar(celulares);
        categoriaDAO.cadastrar(videogames);
        categoriaDAO.cadastrar(informatica);

        produtoDAO.cadastrar(celular);
        produtoDAO.cadastrar(videogame);
        produtoDAO.cadastrar(notebook);

        clienteDAO.cadastrar(cliente);

        em.getTransaction().commit();

        em.close();
    }
}

Outra classe:

public class CadastroDePedido {

    public static void main(String[] args) {
        popularBancoDeDados();
        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        ClienteDAO clienteDAO = new ClienteDAO(em);

        Produto produto = produtoDAO.buscarPorId(1l);
        Produto produto2 = produtoDAO.buscarPorId(2l);
        Produto produto3 = produtoDAO.buscarPorId(3l);
        Cliente cliente = clienteDAO.buscarPorId(1l);

        em.getTransaction().begin();

        Pedido pedido = new Pedido(cliente);
        pedido.adicionarItem(new ItemPedido(10, pedido, produto));
        pedido.adicionarItem(new ItemPedido(40, pedido, produto2));

        Pedido pedido2 = new Pedido(cliente);
        pedido2.adicionarItem(new ItemPedido(2, pedido, produto3));

        PedidoDAO pedidoDAO = new PedidoDAO(em);
        pedidoDAO.cadastrar(pedido);
        pedidoDAO.cadastrar(pedido2);



        em.getTransaction().commit();

        BigDecimal totalVendido = pedidoDAO.valorTotalVendido();
        System.out.println("Valor total: " + totalVendido);

        List<Object[]> relatorio = pedidoDAO.relatorioDeVendas();
        for (Object[] obj : relatorio) {
            System.out.println(obj[0]);
            System.out.println(obj[1]);
            System.out.println(obj[2]);
        }

    }

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


        Produto celular = new Produto("RedMi Note 12", "Muito legal", new BigDecimal("800"), celulares);
        Produto videogame = new Produto("PS5", "PLAYSTATION 5", new BigDecimal("2500"), videogames);
        Produto notebook = new Produto("Macbook", "Macbook pro", new BigDecimal("6000"), informatica);

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

        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        CategoriaDAO categoriaDAO = new CategoriaDAO(em);
        ClienteDAO clienteDAO = new ClienteDAO(em);

        em.getTransaction().begin();

        categoriaDAO.cadastrar(celulares);
        categoriaDAO.cadastrar(videogames);
        categoriaDAO.cadastrar(informatica);

        produtoDAO.cadastrar(celular);
        produtoDAO.cadastrar(videogame);
        produtoDAO.cadastrar(notebook);

        clienteDAO.cadastrar(cliente);

        em.getTransaction().commit();

        em.close();
    }
}

O erro acontece nessa linha:

pedido.adicionarItem(new ItemPedido(10, pedido, produto));

Ao chamar o construtor da classe ItemPedido, pois o produto sendo passado como parâmetro está null. Olhando o código, vi que ele está igual na aula, com os produtos sendo salvos corretamentes, pelo método popularBancoDeDados que é chamado no início do método main.

Se o produto está null, é porque não teve resultado dessa consulta:

Produto produto = produtoDAO.buscarPorId(1l);

Ou seja, no seu banco de dados não tem o produto de id 1, mas deveria ter por conta do método popularBancoDeDados, que salva 3 produtos.

Eu chutaria então que você não está utilizando o banco de dados em memória H2, que foi utilizado no curso, e com isso ao rodar a classe main os registros não estão sendo salvos com os ids 1, 2 e 3.

Boa noite, prof Rodrigo.

Vdd, não estou usando o H2, estou usando o MySQL. Eu apaguei esse código que dos produtos que colocamos depois e funcionou, desse jeito: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Então vou continuar assim mesmo, ou implica em alguma coisa mais a frente no curso?

solução!

Blz, pode seguir que não vai ter problemas. Qualquer coisa é só mandar novas mensagens.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software