我想选择User
s,该组具有给定数组中的名称或具有空组。 这是我的企图查询: @Query("SELECT u FROM User u WHERE (u.group is null OR u.group.name IN :groups)") Optional<Page<User>> findUsersByKeywordAndGroupIncludingNullGroup(Pageable pageable, @Param("groups") String... groups);
但是当我运行时,我有一个SQL语法错误。 因此,是否有正确的方法来做到这一点? 在此先感谢。在数组中选择或在Hibernate查询语言中选择null
0
A
回答
0
问题与您的查询
如果你将通过(null或空)组,然后将得到的查询将成为
select * from users where users.group is null or users.group in()
因此导致Syntax Error near '('
你可以做一个黑客使用sPEL
@Query("SELECT U FROM User U " +
"WHERE U.group IS NULL " +
"OR (1=:#{ #groups == null || #groups.size() == 0 ? 1 : 0} OR U.group.name IN :#{#groups})")
List findUserWithoutGroupOrInGroup(@Param("groups") List<String> groups);
在这里,我使用了一个代理条件
1=:#{ #groups == null || #groups.size() == 0 ? 1 : 0}
该条件
returns 1
如果参数
组是空值或空白,结果在条件1 = 1为TRUE,并从而跳过的
第二部分U.group.name IN :#{#groups}
这种方法不是推荐的方法,也不可扩展。
在我看来,你应该分别取Users without any Group
和Users in given group
。您甚至可以并行触发查询并控制如果组为空,则不会触发Users in given group
。
相关问题
- 1. 在Hibernate中选择加入查询语言
- 2. 在选择查询中选择查询
- 3. Hibernate在Java中选择查询
- 4. 在选择查询中选择MYSQL
- 5. 选择语言
- 6. 如何在innosetup脚本中查询用户的语言选择?
- 7. 选择查询选择语句
- 8. 先在组查询中选择
- 9. 在Linq中选择查询
- 10. 在android中选择查询?
- 11. 在SQL中选择查询
- 12. 在CodeIgniter中选择查询
- 13. 在sqlite中选择查询
- 14. 在hql中选择查询
- 15. 选择中间语言
- 16. 选择查询与数组
- 17. 在iOS中选择正确的语言
- 18. 优化选择查询(内选择+组)
- 19. 在Hibernate中查询语言有什么方法可以从内部查询的结果中进行选择?
- 20. NULL,在Hibernate API的标准再选择
- 21. 查询选择在
- 22. 在选择查询
- 23. 在选择查询
- 24. 在选定的查询中选择?
- 25. 选择查询组合在一组PL/SQL选择querys
- 26. CodeIgniter语言选择
- 27. PHP语言选择
- 28. 选择不在查询中的数据
- 29. 在一个查询中选择*,计数(*)
- 30. Tsql在选择查询中的两个组按语句
这是因为如果你不会传递任何'组'。生成的SQL查询将是'SELECT u FROM User u WHERE u.group is null or u.group.name IN()',这是无效的。 – ansh
我明白了。有没有办法检查'groups'是否为空? –