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

Não consegui solucionar esse erro.

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this.produto" is null at modelo.Categoria.adicionar(Categoria.java:25) at DAO.CategoriaDAO.listarComProdutos(CategoriaDAO.java:61) at TestaListagemDeCategorias.main(TestaListagemDeCategorias.java:16)

`public class Categoria {

private Integer id;
private String nome;
private List<Produto> produto;

public Categoria(Integer id, String nome) {
    this.id = id;
    this.nome = nome;
}

public String getNome() {
    return nome;
}

public Integer getId() {
    return id;
}

public void adicionar(Produto produto) {
    this.produto.add(produto);

}

public List<Produto> getProduto() {
    return produto;
}

}`

public List<Categoria> listarComProdutos() throws SQLException {
        Categoria ultima = null;
        List<Categoria> categorias = new ArrayList<>();

        String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO FROM CATEGORIA C INNER JOIN "+
        "PRODUTO P ON C.ID = P.CATEGORIA_ID";

        try (PreparedStatement pstm = connection.prepareStatement(sql)) {
            pstm.execute();

            try (ResultSet rst = pstm.getResultSet()) {
                while (rst.next()) {

                    if(ultima == null || !ultima.getNome().equals(rst.getString(2))) {

                        Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
                        ultima = categoria;
                        categorias.add(categoria);
                    }

                    Produto produto = new Produto(rst.getInt(3),rst.getString(4),rst.getString(5));                    

                     ultima.adicionar(produto);
                }
            }
        }
        return categorias;
    }
public class TestaListagemDeCategorias {

    public static void main(String[] args) throws SQLException {

        try (Connection connection = new ConnectionFactory().recuperarConexao()) {
            CategoriaDAO categoriaDAO = new CategoriaDAO(connection);
            List<Categoria> listaDeCategoria = categoriaDAO.listarComProdutos();
            listaDeCategoria.stream().forEach(ct -> {
                System.out.println(ct.getNome());

                    for(Produto produto: ct.getProduto()) {
                      System.out.println(ct.getNome()+ " - "+produto.getNome());    
                    }                
            });

        }

    }
1 resposta
solução!

Eu consegui solucionar o problema. eu acabei esquecendo de inicializar a List de maneira correta.

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