Estoy tratando de realizar una consulta SQL utilizando safe CriteriaQuery en JPA 2, y me gustaria poder mostrar los resultados en una pagina JSF utilizando para ello un datatable.
Para la capa de la vista estoy utilizando PrimeFaces y la implementacion de JPA es EclipseLink.
Me gustaria mostrar una consulta del tipo:
select ges_venta_lineas.producto_id, sum(ges_venta_lineas.IMPORTETOTAL) from ges_venta_lineas group by ges_venta_lineas.producto_id
que utilizando CriteriaQuery quedaría esto.
public List<VentaLinea> getResumen(){
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<VentaLinea> c = qb.createQuery(VentaLinea.class);
Root<VentaLinea> root = c.from(VentaLinea.class);
Expression<BigDecimal> sum = qb.sum(root.get(VentaLinea_.importeTotal));
c.multiselect(root.get(VentaLinea_.producto), sum);
c.groupBy(root.get(VentaLinea_.producto));
Query query = getEntityManager().createQuery(c);
return query.getResultList();
}
Estoy recibiendo varios errores ya que al utilizar la funcion sum, se crea una nueva columna que no se corresponde con ningun campo de la clase VentaLinea por lo que entiendo que este metodo no debe devolver List<VentaLinea>, supongo que habrá una manera sencilla de hacerlo ya que lo que intento hacer no es nada del otro mundo, una posible solucion seria utilizar clases para "encapsular" el resultado de las consultas y poder devolver una lista de esa clase, pero me parece demasiado innecesario tener que crear una clase para cada posible consulta que quiera hacer.
Espero que alguien pueda ayudarme, un saludo.