Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Criteria Builder筛选参数列表?_Java_Spring_Spring Boot_Hibernate_Hibernate Criteria - Fatal编程技术网

Java 如何使用Criteria Builder筛选参数列表?

Java 如何使用Criteria Builder筛选参数列表?,java,spring,spring-boot,hibernate,hibernate-criteria,Java,Spring,Spring Boot,Hibernate,Hibernate Criteria,我的Spring Boot应用程序中有过滤功能,除了需要过滤项目列表外,其他一切都很正常。这些项目在我的应用程序中称为“标记”。 当我像这样在URL中插入一个标记时 http://localhost:8080/mybrocki/ads/filter?tag=Antique 一切都好。但当我插入更多的标记时,如: http://localhost:8080/mybrocki/ads/filter?tag=Antique&tag=Malfunction 我总是得到空数组(不应该是空数组)

我的Spring Boot应用程序中有过滤功能,除了需要过滤项目列表外,其他一切都很正常。这些项目在我的应用程序中称为“标记”。 当我像这样在URL中插入一个标记时

http://localhost:8080/mybrocki/ads/filter?tag=Antique
一切都好。但当我插入更多的标记时,如:

http://localhost:8080/mybrocki/ads/filter?tag=Antique&tag=Malfunction
我总是得到空数组(不应该是空数组)。这是我的控制器

@GetMapping("/ads/filter")
    public ResponseEntity<List<AdsDTO>> getAdsByParam(@RequestParam(required = false) String region,
                                                        @RequestParam(required = false) AdsSubGroup adssubgroup,
                                                        @RequestParam(required = false) Long userId,
                                                        @RequestParam(required = false) String status,
                                                        @RequestParam(required = false) String businessType,
                                                        @RequestParam(required = false) String adsType,
                                                        @RequestParam(required = false) Long adsGroupId,
                                                        @RequestParam(required = false) Integer fromPrice,
                                                        @RequestParam(required = false) Integer toPrice,
                                                        @RequestParam(required = false) Boolean fixedPrice,
                                                        @RequestParam(required = false) Boolean freeDelivery,
                                                        @RequestParam(required = false) Boolean productWarranty,
                                                        @RequestParam(required = false) Boolean urgentSales,
                                                        @RequestParam(required = false)Boolean hasImage,
                                                        @RequestParam(required = false) Integer pageNumber,
                                                        @RequestParam(required = false) Integer pageSize,
                                                        @RequestParam(required = false, value = "tag") List<String> tags) throws ForbiddenException {
        return new ResponseEntity<List<AdsDTO>>(adsServiceImplement.findAll(adssubgroup, userId, status, adsType, businessType, adsGroupId, region, fromPrice, toPrice, fixedPrice, freeDelivery, productWarranty, urgentSales, hasImage, pageNumber, pageSize, tags), HttpStatus.OK);
    }
@GetMapping(“/ads/filter”)
公共响应getAdsByParam(@RequestParam(required=false)字符串区域,
@RequestParam(required=false)AdsSubGroup AdsSubGroup,
@RequestParam(required=false)长用户ID,
@RequestParam(必需=false)字符串状态,
@RequestParam(必需=false)字符串业务类型,
@RequestParam(必需=false)字符串类型,
@RequestParam(required=false)长adsGroupId,
@RequestParam(required=false)price中的整数,
@RequestParam(required=false)整数toPrice,
@RequestParam(required=false)布尔固定价格,
@RequestParam(required=false)布尔值freeDelivery,
@RequestParam(必需=false)布尔值产品保修,
@RequestParam(必需=false)布尔值urgentSales,
@RequestParam(必需=false)布尔hasImage,
@RequestParam(必需=false)整数页码,
@RequestParam(必需=false)整数页面大小,
@RequestParam(required=false,value=“tag”)列表标记)引发禁止异常{
返回新的ResponseEntity(adsServiceImplement.findAll(adssubgroup、userId、status、adsType、businessType、adsGroupId、region、fromPrice、toPrice、fixedPrice、freeDelivery、productWarranty、urgentSales、hasImage、pageNumber、pageSize、tags)、HttpStatus.OK);
}
这是我的过滤方法:

 @Override
        public List<AdsDTO> findAll(AdsSubGroup adssubgroup, Long userId, String status, String adsType, 
                                    String businessType, Long adsGroupId, String region, Integer fromPrice, 
                                    Integer toPrice, Boolean fixedPrice, Boolean freeDelivery, Boolean productWarranty, 
                                    Boolean urgentSales, Boolean hasImage, Integer pageNumber, Integer pageSize, List<String> tags) {

         CriteriaBuilder builder = em.getCriteriaBuilder();
         CriteriaQuery<Ads> query = builder.createQuery(Ads.class);
         Root<Ads> ads = query.from(Ads.class);
         query.orderBy(builder.desc(ads.get("adsDate")));
         List<Predicate> predicates = new ArrayList<>();
         Join<Ads, JwtUser> adsUsersJoin = ads.join("users");
         Join<Ads, AdsSubGroup> adsAdsSubGroupJoin = ads.join("adssubgroup");
         Join<Ads, Tag> tagsJoin = ads.join("adsTags");

         if (!Objects.isNull(adsGroupId)) {
             predicates.add(builder.equal(adsAdsSubGroupJoin.get("adsGroupId"), adsGroupId));
         }
         if (!Objects.isNull(adssubgroup)) {
             predicates.add(builder.equal(ads.get("adssubgroup"),adssubgroup));
         }

         if (!StringUtils.isEmpty(region)) {
             predicates.add(builder.like(adsUsersJoin.get("region"), region));
         }

         if (!StringUtils.isEmpty(businessType)) {
             predicates.add(builder.equal(adsUsersJoin.get("businessType"), businessType ));
         }
         
         if (!StringUtils.isEmpty(status)) {
             
             predicates.add(builder.equal(ads.get("status"), status));
         }
         
         if (!Objects.isNull(userId)) {
             
             predicates.add(builder.equal(ads.get("userId"), userId));
         }

         if (!StringUtils.isEmpty(adsType)) {
             predicates.add(builder.equal(ads.get("adsType"), adsType));
         }

         if (!Objects.isNull(fromPrice) && !Objects.isNull(toPrice) && fromPrice < toPrice) {
                predicates.add(builder.between(ads.get("price"), fromPrice, toPrice));
            }

         if (!Objects.isNull(fixedPrice)) {
             if (fixedPrice) {
             predicates.add(builder.equal(ads.get("fixedPrice"), true));
             } else {
             predicates.add(builder.equal(ads.get("fixedPrice"), false));
             }
         }

         if (!Objects.isNull(freeDelivery)) {
             if (freeDelivery) {
             predicates.add(builder.equal(ads.get("freeDelivery"), true));
             } else {
             predicates.add(builder.equal(ads.get("freeDelivery"), false));
             }
         }

         if (!Objects.isNull(productWarranty)) {
             if (productWarranty) {
             predicates.add(builder.equal(ads.get("productWarranty"), true));
             } else {
             predicates.add(builder.equal(ads.get("productWarranty"), false));
             }
         }

         if (!Objects.isNull(urgentSales)) {
             if (urgentSales) {
             predicates.add(builder.equal(ads.get("urgentSales"), true));
             } else {
             predicates.add(builder.equal(ads.get("urgentSales"), false));
             }
         }

         if (!Objects.isNull(hasImage)) {
             if (hasImage) {
                 predicates.add(builder.isNotNull(ads.get("image")));
             } else {
                 predicates.add(builder.isNull(ads.get("image")));
             }
         }
         
            
              if (tags != null && tags.size() > 0) { 
                  for (String tag : tags) {
                  predicates.add(builder.equal(tagsJoin.get("name"), tag));
                  }
              }
              query.select(ads);
         query.where(predicates.toArray(new Predicate[0]));
         if(!(pageNumber==null && pageSize==null)) {
             TypedQuery<Ads> typedQuery = em.createQuery(query);
             typedQuery.setFirstResult((pageNumber-1)*pageSize);
             typedQuery.setMaxResults(pageSize);
             List<Ads> adsList = typedQuery.getResultList();
             return AdsConverter.convertToAdsDTO(adsList);
         }else {
             List<Ads> adsList = em.createQuery(query).getResultList();
             return AdsConverter.convertToAdsDTO(adsList);
         }
 
     }
@覆盖
公共列表findAll(AdsSubGroup、长用户ID、字符串状态、字符串adsType、,
字符串业务类型,长adsGroupId,字符串区域,整数fromPrice,
整数定价、布尔固定价格、布尔免费送货、布尔产品保修、,
布尔值urgentSales、布尔值hasImage、整数页码、整数页面大小、列表标记){
CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(Ads.class);
根ads=query.from(ads.class);
query.orderBy(builder.desc(ads.get(“adsDate”));
列表谓词=新的ArrayList();
Join-adsUsersJoin=ads.Join(“用户”);
Join-adssubjoin=ads.Join(“adssubgroup”);
Join tagsJoin=ads.Join(“adsTags”);
如果(!Objects.isNull(adsGroupId)){
add(builder.equal(adssubjoin.get(“adsGroupId”),adsGroupId));
}
如果(!Objects.isNull(adssubgroup)){
add(builder.equal(ads.get(“adssubgroup”),adssubgroup));
}
如果(!StringUtils.isEmpty(区域)){
add(builder.like(adsUsersJoin.get(“region”),region));
}
如果(!StringUtils.isEmpty(businessType)){
add(builder.equal(adsUsersJoin.get(“businessType”),businessType));
}
如果(!StringUtils.isEmpty(状态)){
add(builder.equal(ads.get(“status”),status));
}
如果(!Objects.isNull(userId)){
add(builder.equal(ads.get(“userId”),userId));
}
如果(!StringUtils.isEmpty(adsType)){
add(builder.equal(ads.get(“adsType”),adsType));
}
如果(!Objects.isNull(fromPrice)&&&!Objects.isNull(toPrice)&&fromPrice