【发布时间】:2014-08-13 10:37:12
【问题描述】:
我在 MySQL 数据库中有两个表。
- 产品
- order_item
客户下订单的产品存储在order_item 表中 - 从product 到order_item 的一对多关系。
目前,我正在执行以下查询。
SELECT t0.prod_id,
sum(t1.quantity_ordered)
FROM projectdb.product t0,
projectdb.order_item t1
WHERE (t0.prod_id = t1.prod_id)
GROUP BY t0.prod_id
HAVING (sum(t1.quantity_ordered) >= ?)
ORDER BY sum(t1.quantity_ordered) DESC
产生此 SQL 的条件查询如下。
CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]>criteriaQuery=criteriaBuilder.createQuery(Object[].class);
Metamodel metamodel = entityManager.getMetamodel();
Root<OrderItem> root = criteriaQuery.from(metamodel.entity(OrderItem.class));
Join<OrderItem, Product> orderItemProdJoin = root.join(OrderItem_.prodId, JoinType.INNER);
List<Expression<?>>expressions=new ArrayList<Expression<?>>();
expressions.add(orderItemProdJoin.get(Product_.prodId));
expressions.add(criteriaBuilder.sum(root.get(OrderItem_.quantityOrdered)));
criteriaQuery.multiselect(expressions.toArray(new Expression[0]));
criteriaQuery.groupBy(orderItemProdJoin.get(Product_.prodId));
criteriaQuery.having(criteriaBuilder.greaterThanOrEqualTo(criteriaBuilder.sum(root.get(OrderItem_.quantityOrdered)), criteriaBuilder.literal(5)));
criteriaQuery.orderBy(criteriaBuilder.desc(criteriaBuilder.sum(root.get(OrderItem_.quantityOrdered))));
List<Object[]> list = entityManager.createQuery(criteriaQuery).getResultList();
此查询汇总order_item 表中每组产品的数量。
它显示如下所示的行列表。
prod_id qunatity_ordered
6 11
8 8
26 8
7 7
31 7
12 6
27 6
24 5
9 5
是否可以只计算此查询产生的行数 - 在这种情况下为 9?
我正在使用 EclipseLink 2.5.2 和 Hibernate 4.3.6 final 提供的 JPA 2.1。
【问题讨论】:
标签: mysql hibernate jpa eclipselink jpa-2.1