Если я возвращаю null
из toPredicate
метода, тогда запуск данных репо пружины выбирает * из запроса. Есть способ, если какое-либо значение является нулевым или недействительным, тогда оно не должно запускать любой запрос и возвращать результат как нулевой.
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);