【发布时间】:2018-06-25 06:54:42
【问题描述】:
我正在尝试编写一个查询,我需要在其中检查集合是否作为参数传递为空。
我正在写这样的东西:
@Query("SELECT u FROM User u" +
"WHERE" +
" :ids IS EMPTY" +
" OR u.id IN :ids")
Collection<User> findUsers(@Param("ids") Collection<String> ids);
此代码在启动时以QuerySyntaxException: ??? is not mapped 失败。堆栈跟踪没有提供任何有价值的信息,但我发现如果我删除下一部分:
:ids IS EMPTY
它开始工作了。
问:如何使用IS EMPTY查询参数?或者如何以任何其他方式检查集合是否为空?
注意:
- 我使用的是 Spring Boot 1.5.8.RELEASE。
- 我还查看了 "Passing empty list as parameter to JPA query throws error",这与以往不同,但没有帮助。
- 我发布的代码很原始,只是为了说明目的而添加的,我的实际查询非常复杂,我真的需要检查集合是否为空。
【问题讨论】:
-
您可以像这样使用
find..InCollection<User> findByIdIn(@Param("ids") Collection<String> ids);它适用于空参数 -
如果这没有帮助你可以在这里查看@davidxxx 的答案stackoverflow.com/a/48073370/5558072
-
如果我记得很清楚,
IS EMPTY用于 HQL 查询中的字段引用,而不是参数,例如u.someList IS EMPTY -
@YCF_L 看到这只是一个例子,我非常复杂的查询,我真的需要检查是否为空。
-
更正:您的意思是“不适用于 Hibernate JPA”,因为它适用于我尝试过的 JPA 提供程序(DataNucleus JPA)。您应该报告您的提供商的错误
标签: java hibernate jpa spring-boot spring-data-jpa