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

[Dúvida] Agrupar por categoria

Fiz esse curso e estou tentando aplicar num projeto pessoal os conceitos. Estou com dificuldades de enxergar como fazer o seguinte, da maneira mais eficiente:

Com base nas tabelas do curso, como retornar numa consulta, uma lista de CATEGORIAS, agrupando os PRODUTOS?

Como se eu criasse uma entidade nova onde cada categoria tivesse uma lista com seus produtos...

1 resposta
solução!

Olá, Amadeu! Tudo bem?

No JPA, você pode fazer isso através do uso de consultas JPQL.

Primeiro, vamos supor que você tenha uma entidade Categoria e uma entidade Produto, onde Produto tem uma associação com Categoria. Nesse caso, você poderia ter algo assim em seu código:

@Entity
public class Categoria {
    @Id
    private Long id;
    private String nome;

    @OneToMany(mappedBy = "categoria")
    private List<Produto> produtos;
    // getters e setters
}

@Entity
public class Produto {
    @Id
    private Long id;
    private String nome;

    @ManyToOne
    private Categoria categoria;
    // getters e setters
}

Agora, para obter uma lista de categorias com seus respectivos produtos, você poderia fazer uma consulta JPQL assim:

String jpql = "select c from Categoria c join fetch c.produtos";
TypedQuery<Categoria> query = em.createQuery(jpql, Categoria.class);
List<Categoria> categorias = query.getResultList();

Neste caso, a consulta retorna uma lista de categorias, e para cada categoria, você pode obter a lista de produtos associados a ela através do método getProdutos().

Lembre-se que a eficiência dessa consulta pode variar dependendo do número de categorias e produtos que você tem em seu banco de dados. Se você tiver muitos produtos para uma categoria, pode acabar com o problema de "N+1 selects". Para resolver isso, você pode querer olhar para o uso de @BatchSize.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

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