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 ✓.