Java 带条件生成器的SQL查询
我有SQL查询,我需要将其转换为criteria builderJava 带条件生成器的SQL查询,java,mysql,jpa,hibernate-criteria,Java,Mysql,Jpa,Hibernate Criteria,我有SQL查询,我需要将其转换为criteria builder SELECT product_id, SUM(`quantity`) AS quantity, price, margin, category_id FROM `product_sale` WHERE time = '2017-02-06 22:39:11' GROUP BY `product_id` 我起步不错,但不知道如何继续下去 CriteriaBuilder cb = em.getCriteriaB
SELECT product_id, SUM(`quantity`) AS quantity, price, margin, category_id
FROM `product_sale`
WHERE time = '2017-02-06 22:39:11'
GROUP BY `product_id`
我起步不错,但不知道如何继续下去
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SaleProduct> cq = cb.createQuery(SaleProduct.class);
Root<SaleProduct> saleProduct = cq.from(SaleProduct.class);
cq.multiselect(saleProduct.get("productId"), cb.sum(saleProduct.<Integer>get("quantity")));
Predicate filterCondition = getFilterCondition(cb, saleProduct, filters);
filterCondition = cb.between(saleProduct.<Date>get("time"), dateTo, dateFrom);
filterCondition = cb.and(filterCondition, cb.equal(saleProduct.get("storeId"), storeId));
cq.where(filterCondition);
cq.groupBy(saleProduct.get("productId"));
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(SaleProduct.class);
根saleProduct=cq.from(saleProduct.class);
cq.multiselect(saleProduct.get(“productId”)、cb.sum(saleProduct.get(“数量”));
谓词filterCondition=getFilterCondition(cb、saleProduct、筛选器);
filterCondition=cb.between(saleProduct.get(“时间”)、dateTo、dateFrom);
filterCondition=cb.and(filterCondition,cb.equal(saleProduct.get(“storeId”),storeId));
cq.where(过滤条件);
cq.groupBy(saleProduct.get(“productId”);
因此,首先将其转换为JPQL。JPQL指的是类和字段,而不是表和列,这里没有人看到您的实体,所以先发布您试图实现的JPQL以及您的实体,然后评论您得到的错误您需要解决的第一个问题是,您不能仅基于您显示的SQL对产品id
列进行分组。price
、margin
和category\u id
的值可能需要包含或删除,因为您当时在groupby
中没有提到,它们不是聚合值。因此,首先将其转换为JPQL。JPQL指的是类和字段,而不是表和列,这里没有人看到您的实体,所以先发布您试图实现的JPQL以及您的实体,然后评论您得到的错误您需要解决的第一个问题是,您不能仅基于您显示的SQL对产品id
列进行分组。price
、margin
和category\u id
的值需要包括或删除,因为您当时在GROUP BY
中没有提到,它们不是聚合值。