java - 检查 JPQL 查询中集合的 NULL?

标签 java mysql hibernate jpa jpql

我正在编写一个基于类别 集合进行查询的 JPQL 查询。我的类别可以为空,因此我正在使用 :categories=NULL 进行检查。

@Query("Select v from Vendor v join v.org vorg join v.categories cats WHERE vorg.email =:email AND (cats in :categories or :categories = NULL)")
Set<Vendor> filterVendors(@Param("emailId") String emailId, @Param("categories") Set<Category> categories);

当类别为 NULL 时,上面的代码工作正常。但是,当类别超过一个值时,我得到错误

java.sql.SQLException: Operand should contain 1 column(s)

与hibernate相关的trace是

category6_.category_id in ( ? , ? ) or ( ? , ? ) is null )

如何检查 JPQL 中集合的空值?我认为解决这个问题应该可以解决这个错误。任何帮助表示赞赏

谢谢。

最佳答案

我是这样得到它的:

coalesce(:myIdCollection, null) is null or id in (:myIdCollection)

关于java - 检查 JPQL 查询中集合的 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45164322/

相关文章:

java - 使 Spring JUnit 测试在测试数据库上运行

java - 如何在 android 中没有更新值的情况下只获取加速度计 X、Y、Z 值?

php - 在 mysql 中创建查询的问题

java - 使用与随机播放匹配的按钮随机播放图像

MySQL 1241 错误

mysql - 如何使主键不唯一 MySQL

java - 在 hibernate 中延迟加载一个 clob

Spring Boot jpa 使用连接映射中的多个键值进行选择

java - 如何判断摄像头是否在使用中?

java - 模态对话框不会阻止其他框架出现在前面