我正在寻找一种为我的存储库制作全局规范的方法,以便做到这样的事情:
return applicantRepository.findAll(globalSpecificationApplicant, pageRequest);
事实上,我有一个规范数组,我想循环进入构建存储库全局规范,其中&和操作员(我的要求中有所有规格)。
这是我的服务:
public Page<Applicant> findWithParams(RechercheApplicantForm form, PageRequest pageRequest) {
if(form.isEmptyForm()) {
logger.debug("empty form findAll");
return findAll(pageRequest);
}
else {
logger.debug("form ok fnidAllLikeForm");
List<Specification<Applicant>> lSpecificationApplicant = applicantRepository.getAllSpecificationsLikeForm(form);
Specification<Applicant> globalSpecificationApplicant = null;
if (lSpecificationApplicant != null){
globalSpecificationApplicant = where(lSpecificationApplicant.get(0));
for (int i = 1; i < lSpecificationApplicant.size(); i++){
// Doesnt work : "and" not defined
globalSpecificationApplicant = globalSpecificationApplicant.and(lSpecificationApplicant.get(i));
}
}
return applicantRepository.findAll(globalSpecificationApplicant, pageRequest);
}
}
我可以在第一个规范中使用where子句但是我不能在...之后使用和子句做同样的事情。
答案 0 :(得分:2)
Specifications.where()
返回Specifications
的实例(这是Specification
的子类型),您需要相应地声明globalSpecificationApplicant
以使用它的实例方法:
Specifications<Applicant> globalSpecificationApplicant = null;
...
globalSpecificationApplicant = globalSpecificationApplicant.and(lSpecificationApplicant.get(i));