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

Incluí dois registros mas ao listar aparece o mesmo nome

Olá,

Incluí dois registros mas ao listar aparece o mesmo nome:

public class CadastroDeProduto {

    public static void main(String[] args) {

        cadastrarProduto();

//         consulta 
        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDao produtoDao = new ProdutoDao(em);

        Produto p = produtoDao.buscarPorId(1l);

        List<Produto> todos = produtoDao.buscarTodos();
        todos.forEach(p2 -> System.out.println(p.getNome()));

    }        

    private static void cadastrarProduto() {

//           faz a conexão no BD
         EntityManager em = JPAUtil.getEntityManager();
         Categoria celulares = new Categoria("CELULARES");
         Produto celular = new Produto("Xiaomi Redmi","Muito legal",new BigDecimal("800"), celulares);
         Produto celular2 = new Produto("Zen Phone","Otimo",new BigDecimal("1000"), celulares);         
         ProdutoDao produtoDao = new ProdutoDao(em);
         ProdutoDao produtoDao2 = new ProdutoDao(em);
         CategoriaDao categoriaDao = new CategoriaDao(em);

         em.getTransaction().begin();
         categoriaDao.cadastrar(celulares);
         produtoDao.cadastrar(celular);
         produtoDao2.cadastrar(celular2);
         em.getTransaction().commit();

         em.close();

ProdutoDao:

    public List<Produto> buscarTodos() {
        String jpql = "SELECT p FROM Produto p"; 
        return em.createQuery(jpql, Produto.class).getResultList();
    }

resultado errado da busca:

Hibernate: 
    select
        produto0_.id as id1_7_,
        produto0_.categoria_id as categori6_7_,
        produto0_.dataCadastro as datacada2_7_,
        produto0_.descricao as descrica3_7_,
        produto0_.nome as nome4_7_,
        produto0_.preco as preco5_7_,
        produto0_1_.marca as marca1_3_,
        produto0_1_.modelo as modelo2_3_,
        produto0_2_.autor as autor1_5_,
        produto0_2_.numeroDePaginas as numerode2_5_,
        case 
            when produto0_1_.id is not null then 1 
            when produto0_2_.id is not null then 2 
            when produto0_.id is not null then 0 
        end as clazz_ 
    from
        produtos produto0_ 
    left outer join
        informaticas produto0_1_ 
            on produto0_.id=produto0_1_.id 
    left outer join
        livros produto0_2_ 
            on produto0_.id=produto0_2_.id
Xiaomi Redmi
Xiaomi Redmi

Se eu mudo para:

        Produto p = produtoDao.buscarPorId(2l);

aparece como resultado:

Zen Phone
Zen Phone

Qualquer dica será bem vinda. Obrigado.

2 respostas

Oi Ricardo,

Tem um errinho nessa linha de codigo:

todos.forEach(p2 -> System.out.println(p.getNome()));

Altere para:

todos.forEach(p2 -> System.out.println(p2.getNome()));
solução!

Beleza Rodrigo, funcionou, erra isso mesmo!

Valeu!

abraço.