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

Metodo buscarPorNome() retornando uma lista somente com o ultimo registro

Eu filtrei o produto pelo nome 'Sony' que existe 6 produtos com este nome, mas quando eu rodo a query ela retorna uma lista com 6 itens mas com o mesmo produto 'Xaiomi Redmi'

este e o codigo do metodo

  public List<Produto> buscarPorNome(String nome){
        String jpql = "SELECT p FROM Produto p WHERE p.nome= ?1";
        return em.createQuery(jpql, Produto.class)
                .setParameter(1, nome)
                .getResultList();
    }
4 respostas

Oi Mikael,

Pode postar o seu código da classe main?

Claro, a classe main esta aqui, a única coisa que fiz de diferente e colocar estes códigos comentados para baixo

public static void main(String[] args) {
        EntityManager em = JPAUtil.getEntityManager();

        Produto produto = new Produto();
        Categoria categoria = new Categoria();

        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        CategoriaDAO categoriaDAO = new CategoriaDAO(em);

        produto.setNome("Xiaomi Redmi");
        produto.setDescricao("Muito legal");
        produto.setPreco(new BigDecimal("800"));
        categoria.setModelo("Celular");
        categoria.setMarca("Sony");
        produto.setCategoria(categoria);


        em.getTransaction().begin();
        produtoDAO.buscarPorNome("Sony").forEach(produto1 -> System.out.println(produto));
        em.getTransaction().commit();
        em.close();

//        categoriaDAO.cadastrarCategoria(categoria);
//        produtoDAO.cadastrarProduto(produto);
//        List<Produto> produtos = produtoDAO.buscarTodos();
//        produtos.forEach(p -> {    System.out.println(p);});
    }
solução!

Oi Mikael,

Acho que na verdade os produtos que você cadastrou estão todos com nome = Xiaomi Redmi.

Pelo seu código acredito que a marca é que esteja cadastrada como Sony.

Obs: tem um errinho nessa linha:

produtoDAO.buscarPorNome("Sony").forEach(produto1 -> System.out.println(produto));

O System.out.println deveria ser: System.out.println(produto1));

Um detalhe faz toda a diferença, era somente o nome da variável que estava pegando errado, estava pegando uma de fora, ao invés da variável do foreach.

Obrigado Rodrigo

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