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

Dúvida no Ex. 4 da Aula 7 - Relacionamentos, otimizando N+1 e ferramentas ORM

Criei a classe TestaCategorias conforme o exercicio pediu: ```package br.com.matua.lojavirtual.jdbc;

import java.sql.Connection; import java.sql.SQLException; import java.util.List;

import br.com.matua.lojavirtual.jdbc.modelo.Categoria; import br.com.matua.lojavirtual.jdbc.modelo.CategoriaDAO; import br.com.matua.lojavirtual.jdbc.modelo.Produto;

public class TestaCategorias {

public static void main(String[] args) throws SQLException { try(Connection con = new ConnectionPool().getConnection()) { List categorias = new CategoriaDAO(con).listaComProdutos(); for(Categoria categoria : categorias) { System.out.println(categoria.getNome());

for(Categoria produto : categoria.getProdutos()) { System.out.println(categoria.getNome() + " - " + produto.getNome()); }

} } }

}


e estou com o seguinte problema:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: Can only iterate over an array or an instance of java.lang.Iterable

at br.com.matua.lojavirtual.jdbc.TestaCategorias.main(TestaCategorias.java:19)

No caso a linha 19 é:

for(Categoria produto : categoria.getProdutos()) { ``` esta dando erro bem no getProdutos() e não sei como arrumar, já criei o metodo de diversas maneiras e fiz varios testes e nada. O que pode estar errado?

4 respostas

Boa noite Matheus,

Altere o for para:

for(Produto produto : categoria.getProdutos()) {

}

Olá Matheus! Mande aqui o seu método getProdutos() para eu dar uma olhada.

Olá! No decorrer das aulas não encontrei onde o metodo é criado, tentei improvisar mas não rolou.

public class Categoria {
    Integer Id;
    String Nome;
    String nomeProduto;

//Outros metedos
.
.
.
    public String getProdutos() {
        return nomeProduto;
    }

}
solução!

Matheus como eu suspeitava o problema é a forma como você utilizou o for e está relacionado com o seu método getProdutos().

Você utilizou o foreach que funciona da seguinte forma:

Para cada tipo dentro de uma coleção será executado o bloco de código.

Então veja o seu primeiro foreach:

for(Categoria categoria : categorias) { 
    System.out.println(categoria.getNome());
}

Ele diz que para cada Categoria dentro de categorias, que é uma coleção, ele ira executar o System.out.println()

No entanto vamos comparar agora com seu segundo foreach

for(Categoria produto : categoria.getProdutos()) { 
    System.out.println(categoria.getNome() + " - " + produto.getNome()); 
}

Perceba que nesse caso você pede que para cada categoria dentro de categoria.getProdutos() seja executado o System.out.println(). Porém perceba que seu método getProdutos() ele não retorna uma coleção ou uma lista mas sim uma String e por isso o compilador acusa um erro.

A sua classe Categoria também está incorreta. O correto seria sua categoria possuir uma lista de produtos e dai o método getProdutos() retornaria esta lista. Ficando assim:

public class Categoria {
    Integer Id;
    String Nome;
    List<Produto> produtos = new ArrayList<Produto>();

//Outros metedos
.
.
.
    public List getProdutos() {
        return produtos;
    }

}

Mas é necessário inserir produtos nessa Lista através de um DAO. Aconselho você a ver e fazer passo a passo a explicação do curso. Deixei um link ao final.

Espero ter ajudado! Bons Estudos!

Explicação do Curso

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