我必须使用jpa查询来计数所有存在的对象。所以,我需要从我的查询集合中的id计数。以下是Repository代码:
public interface ProductRepository extends PagingAndSortingRepository<Product, String>, JpaSpecificationExecutor<Product> {
@Query("SELECT CASE WHEN COUNT(p.id) = COUNT ( :ids )THEN true ELSE false END " +
"FROM Product p WHERE p.id IN :ids")
boolean existsProductsByIdIn(Set<String> ids);
}
在上面的代码中,blog(:ids)不起作用。我也试过使用SIZE(:ids)。
**注意:**我不想把大小作为参数传递。
2条答案
按热度按时间64jmpszr1#
解决方案如下:
您遇到的问题是因为JPA不支持JPQL中的集合参数的直接计数。相反,您可以使用原生SQL查询来实现这一点。如果你想坚持使用JPQL,你需要将大小作为一个单独的参数传递(你提到过你不想要的)。
但是,有一个使用
INDEX
函数的JPQL解决方案:使用这种方法,我们假设
:ids
集合在其索引中没有间隙。+ 1
是因为INDEX
是基于0的。这个解决方案应该给予您想要的结果,而不需要使用原生SQL或单独传递大小。1tuwyuhd2#
你不觉得这可能会给予你同样的结果吗?
您正在比较输入的SET值,这些值只是查询中的不同值。如果您将比较总id与不同id,您可能会得到所需的结果。