Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exception Não é possível invocar "br.com.alura.loja.modelo.Pedido.getItens()" porque "pedido" é nulo

package br.com.alura.loja.testes;

import br.com.alura.loja.dao.CategoriaDao; import br.com.alura.loja.dao.ClienteDao; import br.com.alura.loja.dao.PedidoDao; import br.com.alura.loja.dao.ProdutoDao; import br.com.alura.loja.modelo.*; import br.com.alura.loja.util.JPAUtil; import br.com.alura.loja.vo.RelatorioDeVendasVo;

import javax.persistence.EntityManager; import java.math.BigDecimal; import java.util.List;

public class PerformaceConsultas { public static void main(String[] args) { popularBancoDeDados();

    EntityManager em = JPAUtil.getEntityManager();
    Pedido pedido = em.find(Pedido.class, 1l);
    System.out.println(pedido.getItens().size() );


}

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

    Produto celular = new Produto("IPHONE", "Muito Legal", new BigDecimal("800"), celulares);
    Produto videogame = new Produto("PS5", "Viciante", new BigDecimal("4000"), videogames);
    Produto macbook = new Produto("MacbookPRO", "Computador que vou comprar com certeza", new BigDecimal("80000"), informatica);


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

    Pedido pedido = new Pedido(cliente);
    pedido.adicionarItem(new ItemPedido(10, pedido, celular));
    pedido.adicionarItem(new ItemPedido(40, pedido, videogame));

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

    EntityManager em = JPAUtil.getEntityManager();
    ProdutoDao produtoDao = new ProdutoDao(em);
    CategoriaDao categoriaDao = new CategoriaDao(em);
    ClienteDao clienteDao = new ClienteDao(em);
    ProdutoDao pedidoDao = new ProdutoDao(em);

    em.getTransaction().begin();

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

    produtoDao.cadastrar(celular);
    produtoDao.cadastrar(videogame);
    produtoDao.cadastrar(macbook);

    clienteDao.cadastrar(cliente);



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

}

CONSOLE:

Hibernate: insert into categorias (id, nome) values (default, ?) Hibernate: insert into categorias (id, nome) values (default, ?) Hibernate: insert into categorias (id, nome) values (default, ?) Hibernate: insert into produtos (id, categoria_id, dataCadastro, descricao, nome, preco) values (default, ?, ?, ?, ?, ?) Hibernate: insert into produtos (id, categoria_id, dataCadastro, descricao, nome, preco) values (default, ?, ?, ?, ?, ?) Hibernate: insert into produtos (id, categoria_id, dataCadastro, descricao, nome, preco) values (default, ?, ?, ?, ?, ?) Hibernate: insert into clientes (id, cpf, nome) values (default, ?, ?) Hibernate: select pedido0_.id as id1_3_0_, pedido0_.cliente_id as cliente_4_3_0_, pedido0_.data as data2_3_0_, pedido0_.valor_total as valor_to3_3_0_ from pedidos pedido0_ where pedido0_.id=? Exception in thread "main" java.lang.NullPointerException: Cannot invoke "br.com.alura.loja.modelo.Pedido.getItens()" because "pedido" is null at br.com.alura.loja.testes.PerformaceConsultas.main(PerformaceConsultas.java:21)

Process finished with exit code 1

1 resposta
solução!

Oi!

Para resolver o problema, você pode:

  • Verificar se o pedido foi encontrado antes de tentar acessar seus itens:

    if (pedido != null) {
        System.out.println(pedido.getItens().size());
    } else {
        System.out.println("Pedido não encontrado!");
    }
    
  • Certifique-se de que você tem um registro na tabela pedidos com o ID 1.

  • Verifique se não há problemas na configuração da sua base de dados ou no mapeamento JPA entre Pedido e ItemPedido.