JPA 利用javax.persistence.criteria类做复杂查询

/**
 * 数据查询测试
 * @param listedType
 * @param operatorId
 * @param area
 * @return
 */
public PagedResponse<Delegation> findAllTest(Integer listedType,String operatorId,String area,Pageable pageable){
    Page<Delegation> lists = delegationRepository.findAll(getSerachInfo(listedType,operatorId,area),pageable);
    return new PagedResponse<>(lists.getContent(), lists.getNumber(), lists.getSize(), lists.getTotalElements(), lists.getTotalPages(), lists.isLast());
}

public Specification<Delegation> getSerachInfo(Integer listedType,String operatorId,String area){
    return new Specification<Delegation>() {

        @Override
        public Predicate toPredicate(Root<Delegation> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
            Join<Delegation,HousingRegistration> join = root.join("housingRegistration",JoinType.INNER);
            List<Predicate> predicateList = Lists.newArrayList();
            Path<Integer> listedTypePath = root.get("listedType");
            if(listedType!=null){
                Predicate predicate = criteriaBuilder.equal(listedTypePath,listedType);
                predicateList.add(predicate);
            }else {
                Predicate predicate0 = criteriaBuilder.equal(listedTypePath,0);
                Predicate predicate1 = criteriaBuilder.equal(listedTypePath,1);
                Predicate predicate = criteriaBuilder.or(predicate0,predicate1);
                predicateList.add(predicate);
            }
            if(StringUtils.isNotBlank(operatorId)){
                Path<String> operatorIdPath = root.get("practitionersId");
                Predicate predicate = criteriaBuilder.equal(operatorIdPath,operatorId);
                predicateList.add(predicate);
            }
            if(StringUtils.isNotBlank(area)){
                Path<String> areaPath = join.get("area");
                Predicate predicate = criteriaBuilder.equal(areaPath,area);
                predicateList.add(predicate);
            }
            Predicate predicateResult = null;
            if(predicateList!=null && predicateList.size()>0){
                for(Predicate predicate:predicateList){
                    if(predicateResult==null){
                        predicateResult = predicate;
                    }else {
                        predicateResult = criteriaBuilder.and(predicateResult,predicate);
                    }
                }
            }
            return predicateResult;
        }
    };
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence.AssociationOverrides.class javax.persistence.AttributeOverride.class javax.persistence.AttributeOverrides.class javax.persistence.Basic.class javax.persistence.Cache.class javax.persistence.Cacheable.class javax.persistence.CacheRetrieveMode.class javax.persistence.CacheStoreMode.class javax.persistence.CascadeType.class javax.persistence.CollectionTable.class javax.persistence.Column.class javax.persistence.ColumnResult.class javax.persistence.criteria.AbstractQuery.class javax.persistence.criteria.CollectionJoin.class javax.persistence.criteria.CompoundSelection.class javax.persistence.criteria.CriteriaBuilder.class javax.persistence.criteria.CriteriaQuery.class javax.persistence.criteria.Expression.class javax.persistence.criteria.Fetch.class javax.persistence.criteria.FetchParent.class javax.persistence.criteria.From.class javax.persistence.criteria.Join.class javax.persistence.criteria.JoinType.class javax.persistence.criteria.ListJoin.class javax.persistence.criteria.MapJoin.class javax.persistence.criteria.Order.class javax.persistence.criteria.ParameterExpression.class javax.persistence.criteria.Path.class javax.persistence.criteria.PluralJoin.class javax.persistence.criteria.Predicate.class javax.persistence.criteria.Root.class javax.persistence.criteria.Selection.class javax.persistence.criteria.SetJoin.class javax.persistence.criteria.Subquery.class javax.persistence.DiscriminatorColumn.class javax.persistence.DiscriminatorType.class javax.persistence.DiscriminatorValue.class javax.persistence.ElementCollection.class javax.persistence.Embeddable.class javax.persistence.Embedded.class javax.persistence.EmbeddedId.class javax.persistence.Entity.class javax.persistence.EntityExistsException.class javax.persistence.EntityListeners.class javax.persistence.EntityManager.c
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值