Buenas estoy tratando de realizar una consulta SQL mediante la api de CriteriaBuilder, la consulta sql que quiero realizar debe mostrar campos obtenidos de diferentes tablas y eso es lo que no se como hacer, una consulta de ejemplo podría ser la siguiente, aunque me valdría cualquier ejemplo que reúna campos de distintas tablas aunque sea mas sencillo que esta que pongo aquí.
select c.NOMBRE, sum(vl.IMPORTETOTAL) from ges_venta_lineas as vl, ges_producto as p, ges_modelo as m, ges_categoria as c where vl.producto_id=p.ID and p.modelo_id=m.ID and m.categoria_id=c.ID and vl.CREATION_DATE< X and vl.CREATION_DATE>Y group by m.categoria_id
He leído que una posible solución es utilizar el método createTupleQuery y la clase Tuple perteneciente a JPA que permite almacenar todos los posibles campos que queramos obtener de la consulta y manejarlos mediante un alias, por ejemplo para una consulta sencilla como esta:
select ges_venta_lineas.producto_id as producto, sum(ges_venta_lineas.IMPORTETOTAL) as suma from ges_venta_lineas group by ges_venta_lineas.producto_id
se hace de la siguiente manera:
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq= qb.createTupleQuery();
Root<VentaLinea> root = c.from(VentaLinea.class);
Expression<BigDecimal> sum = qb.sum(root.get(VentaLinea_.importeTotal));
c.multiselect(root.get(VentaLinea_.producto).alias("producto"), sum.alias("suma"));
c.groupBy(root.get(VentaLinea_.producto));
Pero a la hora de mezclar campos de distintas tablas no consigo dar con la tecla, espero haberme explicado :)
Un saludo