动态链规范使用where&和运营商

时间:2014-07-19 13:10:22

标签: java spring java-ee spring-data-jpa specifications

我正在寻找一种为我的存储库制作全局规范的方法,以便做到这样的事情:

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子句但是我不能在...之后使用和子句做同样的事情。

1 个答案:

答案 0 :(得分:2)

Specifications.where()返回Specifications的实例(这是Specification的子类型),您需要相应地声明globalSpecificationApplicant以使用它的实例方法:

Specifications<Applicant> globalSpecificationApplicant = null;
...
globalSpecificationApplicant = globalSpecificationApplicant.and(lSpecificationApplicant.get(i));