代码之家  ›  专栏  ›  技术社区  ›  eento

使用where&和运算符动态链接规范

  •  0
  • eento  · 技术社区  · 10 年前

    我正在寻找一种方法来为我的存储库制定一个全局规范,以便做到以下几点:

    return applicantRepository.findAll(globalSpecificationApplicant, pageRequest);
    

    事实上,我得到了一个Specification数组,我想循环到其中以使用where&和操作员(所有规格都在我的要求中)。

    这是我的服务:

     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子句,但我不能在后面使用and子句。。

    1 回复  |  直到 10 年前
        1
  •  2
  •   axtavt    10 年前

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

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