Java 使用where&;和操作员
我正在寻找一种为我的存储库制定全局规范的方法,以便执行以下操作:Java 使用where&;和操作员,java,spring,jakarta-ee,spring-data-jpa,specifications,Java,Spring,Jakarta Ee,Spring Data Jpa,Specifications,我正在寻找一种为我的存储库制定全局规范的方法,以便执行以下操作: return applicantRepository.findAll(globalSpecificationApplicant, pageRequest); 事实上,我得到了一个规范数组,我想循环使用where&和操作符构建存储库全局规范(我的请求中需要所有规范) 这是我的服务: public Page<Applicant> findWithParams(RechercheApplicantForm form, P
return applicantRepository.findAll(globalSpecificationApplicant, pageRequest);
事实上,我得到了一个规范数组,我想循环使用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);
}
}
公共页面findWithParams(RecherCheapplicationForm,PageRequest PageRequest){
if(form.isEmptyForm()){
debug(“空表单findAll”);
返回findAll(页面请求);
}
否则{
debug(“form ok fnidAllLikeForm”);
List lsspecificationapplicator=applicationrepository.getAllSpecificationsLkeForm(表格);
规范GlobalSpecificationApplication=null;
if(lsspecificationapplicator!=null){
GlobalSpecificationApplication=其中(lsSpecificationApplication.get(0));
对于(int i=1;i
我可以对第一个规范使用where子句,但不能对..规范后的and子句使用where子句。where()
返回规范的一个实例(它是规范的一个子类型
),您需要相应地声明GlobalSpecificationApplication
,才能使用其实例方法:
Specifications<Applicant> globalSpecificationApplicant = null;
...
globalSpecificationApplicant = globalSpecificationApplicant.and(lSpecificationApplicant.get(i));
规范GlobalSpecificationApplication=null;
...
globalsspecificationapplication=globalsspecificationapplication.and(lsspecificationapplication.get(i));
您对此进行了测试吗?因为我没有发布我的试用版,但这不起作用,“and”操作符似乎只会直接链接到“where”子句。。这就是我发布的原因。请注意globalspecificationapplicator
的定义-它是规范
,而不是规范
。很抱歉,我没有看到这一点。。非常感谢。它现在已经被弃用了