Seguindo o código apresentado na aula, este capítulo, acabo tomando um NullPointerException sempre que tento inserir um Produto dentro de uma categoria. O engraçado é que, debugando, o objeto para inserção vem populado e o erro ocorre no meu método de inserção, dentro da classe Categoria. Classe Categoria
public class Categoria {
private final Integer id;
private final String nome;
private List<Produto> produtos;
public Categoria(Integer id, String nome) {
this.id = id;
this.nome = nome;
}
public void adicionaProduto(Produto produto){
produtos.add(produto);
}
@Override
public String toString() {
return "[" + id + " - " + nome +"]";
}
public Integer getId() {
return id;
}
public String getNome() {
return nome;
}
public List<Produto> getProdutos() {
return produtos;
}
}
Método de listagem de categoria e seus produtos, dentro da Classe CategoriaDAO
public List<Categoria> listaComPordutos() throws SQLException {
List<Categoria> categoriaComProdutos = new ArrayList<Categoria>();
Categoria categoriaAtual = null;
String sql = "select c.id as c_id, c.nome as c_nome, p.id as p_id, p.nome as p_nome, p.descricao as p_descricao from Categoria as c join Produto as p on p.categoria_id = c.id";
try(PreparedStatement ps = con.prepareStatement(sql)){
ps.execute();
try(ResultSet rs = ps.getResultSet()){
while(rs.next()){
int catId = rs.getInt(1);
String catNome = rs.getString(2);
if(categoriaAtual == null || !categoriaAtual.getNome().equals(catNome)){
Categoria categoria = new Categoria(catId, catNome);
categoriaComProdutos.add(categoria);
categoriaAtual = categoria;
}
int prodId = rs.getInt(3);
String prodNome = rs.getString(4);
String prodDescricao = rs.getString(5);
Produto p = new Produto(prodNome, prodDescricao);
p.setId(prodId);
categoriaAtual.adicionaProduto(p);
}
}
}
return categoriaComProdutos;
}
Método na classe de Testes
public class TestaCategorias {
public static void main(String[] args) throws SQLException {
try(Connection con = new ConnectionPool().getConnection()){
CategoriaDAO dao = new CategoriaDAO(con);
List<Categoria> categoriasComProduto = dao.listaComPordutos();
for (Categoria categoria : categoriasComProduto) {
System.out.println(categoria);
for (Produto produto : categoria.getProdutos()) {
System.out.println(produto.getNome());
}
}
}
}
}
Alguém sabe me dizer, onde exatamente estou errando?