如果toPredicate返回jpa规范,则返回null

时间:2019-06-28 15:02:10

标签: spring hibernate spring-data-jpa spring-data

如果我从null方法返回toPredicate,那么spring数据仓库触发select * from query。是否有某种方法,如果某个值为null或无效,则它不应触发任何查询并返回结果为空。

 Specification<MasterTenantParamValue> mstParamValueSpecification = new Specification<MasterTenantParamValue>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Predicate toPredicate(Root<MasterTenantParamValue> mstParamValue, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {

                    List<DependantValue> mstDependantValues = mstparamDependencies.get(parameterId);
                    List<Predicate> predicates = new ArrayList<Predicate>();
                    if(mstDependantValues == null || mstDependantValues.isEmpty() ||  dependsOn.size() != mstDependantValues.size()) {
                        logger.info("Cached Master Dependant Values and requested Dependant Values is not matching");
                        return null;
                    }

                    predicates.add(criteriaBuilder.equal(mstParamValue.get("tenantId"), requestInfo.getTenant()));
                    predicates.add(criteriaBuilder.equal(mstParamValue.get("paramId"), parameterId));
                    predicates.add(criteriaBuilder.like(mstParamValue.get("valueName"), "%" + search + "%"));
                    int index = 0;
                    for(ParameterDTO parameterDTO : dependsOn) {
                        if(mstDependantValues != null) {
                            DependantValue mstDependantValue = mstDependantValues.get(index);//Before check both list size is same or not
                            if(mstDependantValue.getParamId().equals(parameterDTO.getParamId())) {
                                int attribute = mstDependantValue.getAttribute();
                                List<String> valueIds = new ArrayList<>();
                                parameterDTO.getValues().forEach(parameterValue -> {
                                    valueIds.add(parameterValue.getValueId());
                                });
                                if(attribute == 1) {
                                    predicates.add(criteriaBuilder.equal(mstParamValue.get("attr1"), valueIds));
                                } 
                                if(attribute == 2) {
                                    predicates.add(criteriaBuilder.equal(mstParamValue.get("attr2"), valueIds));
                                } 
                                if(attribute == 3) {
                                    predicates.add(criteriaBuilder.equal(mstParamValue.get("attr3"), valueIds));
                                } 
                            }
                        }
                        index++;
                    }
                    return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
                }
            };

            results = masterTenantParamValueRepository.findAll(mstParamValueSpecification);

0 个答案:

没有答案