0
Good night, I am trying to select between 1:n and n:1 tables using jpql
table categoira
@NotNull
@Column(nullable = false)
@OneToMany(mappedBy = "categoria")
private List<ProdutoCategoria> produtoCategorias;
Table of products
@ManyToOne
@JoinColumn(name = "idCategoria", nullable = false)
private Categoria categoria;
@ManyToOne
@JoinColumn(name = "idProduto", nullable = false)
private Produto produto;
product table
@NotBlank
@Column(nullable = false)
@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL)
private List<ProdutoCategoria> categorias;
jpql
StringBuilder jpqlBuilder = new StringBuilder();
jpqlBuilder.append("select new br.com.ecommerce.domain.dto.ProdutoDTO( ");
jpqlBuilder.append(" cat.nome, ");
jpqlBuilder.append(" count(pro) ");
jpqlBuilder.append(") ");
jpqlBuilder.append("from Produto pro ");
jpqlBuilder.append("join pro.categorias.categoria cat ");
jpqlBuilder.append("group by cat.nome ");
with this query I hope to know how many products each category has ex: Category Hunted has 3 registered products
Constructor DTO
public ProdutoDTO(String categoria, Long quantidadeProdutos) {
this.categoria = categoria;
this.quantidadeProdutos = quantidadeProdutos;
}
by trying the way this, gives that mistake
org.hibernate.Queryexception: illegal Attempt to dereference Collection [product0_.id.categorias] with element Property Reference [category]