Depois que eu adicionei mais produtos em popularBancoDeDados(), quando rodo o programa dá esse erro:
e o codigo de onde ele reclama está assim:
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Depois que eu adicionei mais produtos em popularBancoDeDados(), quando rodo o programa dá esse erro:
e o codigo de onde ele reclama está assim:
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:
Então vou continuar assim mesmo, ou implica em alguma coisa mais a frente no curso?
Blz, pode seguir que não vai ter problemas. Qualquer coisa é só mandar novas mensagens.
Bons estudos!