我想選擇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. 在選擇查詢中選擇查詢
- 4. Hibernate在Java中選擇查詢
- 5. 在grails中選擇語言
- 6. yii2在查詢中選擇空值(選擇NULL作爲列,...)
- 7. 在選擇查詢中選擇MYSQL
- 8. 或在eWAM中的查詢 - 選擇器
- 9. 選擇語言
- 10. 如何在innosetup腳本中查詢用戶的語言選擇?
- 11. 選擇查詢選擇語句
- 12. 先在組查詢中選擇
- 13. 在Linq中選擇查詢
- 14. 在wordpress中選擇查詢
- 15. 在sqlite中選擇查詢
- 16. 在android中選擇查詢
- 17. 在CodeIgniter中選擇查詢
- 18. 在android中選擇查詢?
- 19. 在SQLite中選擇查詢?
- 20. 在SQL中選擇查詢
- 21. 在hql中選擇查詢
- 22. 選擇中間語言
- 23. 選擇查詢與數組
- 24. 在mysql中選擇查詢以前的選擇查詢
- 25. 在iOS中選擇正確的語言
- 26. 在Inno Setup中選擇多種語言
- 27. 優化選擇查詢(內選擇+組)
- 28. 在Hibernate中查詢語言有什麼方法可以從內部查詢的結果中進行選擇?
- 29. php - 查詢選擇數組中的值
- 30. NULL,在Hibernate API的標準再選擇
這是因爲如果你不會傳遞任何'組'。生成的SQL查詢將是'SELECT u FROM User u WHERE u.group is null or u.group.name IN()',這是無效的。 – ansh
我明白了。有沒有辦法檢查'groups'是否爲空? –