Java 如何在CriteriaQuery中实现sum
我想从数据库中获取包含一列和两个字段的数据,其中的参数是动态的 我尝试使用谓词实现,我可以通过谓词获得组,但sum不起作用Java 如何在CriteriaQuery中实现sum,java,spring-data-jpa,criteria-api,Java,Spring Data Jpa,Criteria Api,我想从数据库中获取包含一列和两个字段的数据,其中的参数是动态的 我尝试使用谓词实现,我可以通过谓词获得组,但sum不起作用 Page<PaymentDetail> aggregatedPaymentDetails2 = paymentDetailRepository.findAll(new Specification<PaymentDetail>() { @Override public Predicate toPredic
Page<PaymentDetail> aggregatedPaymentDetails2 = paymentDetailRepository.findAll(new Specification<PaymentDetail>() {
@Override
public Predicate toPredicate(Root<PaymentDetail> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
final List<Predicate> predicates = new ArrayList<>();
query.multiselect(root.get("id"), root.get("lockVersion"), cb.sum(root.get("amountPaid")), root.get("referenceNumber"), root.get("paymentSlot"));
query.groupBy(root.get("referenceNumber"), root.get("paymentSlot").get("id"));
for (final QueryCriterion queryCriterion : queryCriterionList) {
final OperatorEnum operatorEnum = queryCriterion.getOperatorEnum();
From join = root;
final String[] attributes = queryCriterion.getKey().split("\\.");
for (int i = 0, attributesLength = attributes.length - 1; i < attributesLength; i++) {
join = join.join(attributes[i], JoinType.LEFT);
}
final Path path = join.get(attributes[attributes.length - 1]);
final Object value = dataTypesHelper.typeCastValue(path, queryCriterion);
predicates.add(operatorEnum.getOperator().getPredicateByKeyAndValue(path, value, cb));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
},pageable);
Page aggregatedPaymentDetails2=paymentDetailRepository.findAll(新规范(){
@凌驾
公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder cb){
最终列表谓词=new ArrayList();
query.multiselect(root.get(“id”)、root.get(“lockVersion”)、cb.sum(root.get(“amountPaid”)、root.get(“referenceNumber”)、root.get(“paymentSlot”);
groupBy(root.get(“referenceNumber”)、root.get(“paymentSlot”).get(“id”);
对于(最终查询标准查询标准:查询标准列表){
final OperatorEnum OperatorEnum=queryCriterion.getOperatorEnum();
From join=root;
最后一个字符串[]attributes=queryCriterion.getKey().split(“\\”);
for(inti=0,attributesLength=attributes.length-1;i
我希望输出是pagewithamountpayed和groupbypaymentslotid之和,PaymentSlot与paymentdetails有一个one-omany关系。详细信息
规范
旨在生成一个谓词
,它本质上是一个where子句
您还可以通过JPAAPI触发副作用,这是JPAAPI的一个不幸弱点。Spring Data JPA中不支持通过规范更改返回值。为此使用一个新的方法