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()
);
}