Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 在@param中传递的HQL检查列表大小_Java_Hibernate_Spring Data Jpa_Spring Data_Hql - Fatal编程技术网

Java 在@param中传递的HQL检查列表大小

Java 在@param中传递的HQL检查列表大小,java,hibernate,spring-data-jpa,spring-data,hql,Java,Hibernate,Spring Data Jpa,Spring Data,Hql,有没有办法检查util.Listsize?例如,它是否为空 我尝试了下面的查询,它生成了带有消息的QuerySyntaxException???未映射 ..where (:filters IS EMPTY or (d.id in (:filters))") List<EntityXX> getXXX(List<Integer> filters); 。其中(:filters为空或(:filters)中的d.id) 列表getXXX(列表过滤器); 正如dbl在其

有没有办法检查
util.List
size?例如,它是否为空

我尝试了下面的查询,它生成了带有消息的
QuerySyntaxException
???未映射

..where (:filters IS EMPTY or  (d.id in (:filters))")
    List<EntityXX> getXXX(List<Integer> filters);
。其中(:filters为空或(:filters)中的d.id)
列表getXXX(列表过滤器);

正如dbl在其评论中回答的那样,无法检查作为@Param传递的列表的大小

您使用的是HQL,因此由于JPQL查询始终是有效的HQL查询,因此我想分享我的解决方案

@Query("SELECT p FROM Product p "
            + "LEFT JOIN p.categories category "
            + "WHERE p.name LIKE CONCAT('%', :searchRequest, '%') "
            + "AND p.description LIKE CONCAT('%', :description, '%') "
            + "AND p.price BETWEEN :priceLow AND :priceHigh "
            + "AND p.archived = :archived "
            + "AND category.name IN :selectedCategories "
            + "GROUP BY p "
            + "HAVING SIZE(p.categories) >= :amountOfSelectedCategories"

    )
    Page<Product> findAllBySearchModel(
            Pageable pageable,
            @Param("searchRequest") String searchRequest,
            @Param("description") String description,
            @Param("priceLow") BigDecimal priceLow,
            @Param("priceHigh") BigDecimal priceHigh,
            @Param("archived") boolean archived,
            @Param("selectedCategories") List<String> selectedCategories,
            @Param("amountOfSelectedCategories") int amountOfSelectedCategories
    );


*注意:我的代码有点简化,不符合生产环境标准。我只想为那些遇到同样问题的人提供一个小例子。

没有这种技术来检查传递的集合的大小…可以这样做:
where(:arefiltersfempty为TRUE或(:filters)中的d.id)
,其中参数
areFiltersEmpty
的值将是
过滤器的结果。isEmpty()
另一个可能有用的值。
if (!searchModel.getSelectedCategories().isEmpty()) {
                return productService.findAllBySearchModel(
                                pageable,
                                searchModel.getSearchRequest(),
                                searchModel.getDescription(),
                                searchModel.getPriceLow(),
                                searchModel.getPriceHigh(),
                                searchModel.isArchivedView(),
                                searchModel.getSelectedCategories(),
                                searchModel.getSelectedCategories().size()
                );
            }