我正在尝试使用JPA 2中的安全CriteriaQuery执行SQL查询,我想使用数据表在JSF页面中显示结果。 对于视图层,我使用PrimeFaces,JPA实现是EclipseLink。
我想显示一个查询,例如:
select ges_venta_lineas.producto_id, sum (ges_venta_lineas.IMPORTETOTAL) from ges_venta_lineas group by ges_venta_lineas.producto_id
使用CriteriaQuery看起来像这样。
public List <VentaLinea> getResumen () {
CriteriaBuilder em.getCriteriaBuilder qb = ();
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).;
query.getResultList return ();
}
我收到一些错误,因为使用函数sum,一个新的列不对应VentaLinea类的任何字段所以我明白这个方法不应该返回List,我想这将是一个简单的方法来做到这一点,因为我正在尝试做的事情并不是什么大问题,一个可能的解决方案是使用类来“封装”查询的结果并返回那种类型的列表,但我认为创建太多了我需要的每个可能的查询的类。 我希望有人可以帮助我,抱歉可能出现语法错误。
答案 0 :(得分:1)
您希望从查询中获得的不是实体列表,而是元组列表。因此无法使用List<VentaLinea>
。
JPA提供了两种处理这种情况的标准方法:
List<?>
或List,它将有效地保留VentaLinea实体和sum
的结果,可以Object[]
或Tuple 有关如何在此处实施的详细信息:http://www.objectdb.com/java/jpa/query/jpql/select#Multi_Selection_