如果在 Spring Data JPA 中为空或为空,如何在 @Query 中跳过 @Param

Posted

技术标签:

【中文标题】如果在 Spring Data JPA 中为空或为空,如何在 @Query 中跳过 @Param【英文标题】:How to skip @Param in @Query if is null or empty in Spring Data JPA 【发布时间】:2018-03-29 02:48:14 【问题描述】:
@Query(value = "Select f from Documents f " +
        "RIGHT JOIN f.documentStatus ds " +
        "where f.billingAccount.accountId  in :billingAccountIdList " +
        " and ds.statusCode in :paymentStatuses" +
        " and f.paymentDate < :paymentDate")
List<FinancialDocumentEntity> getFinancialDocumentsOverdue(@Param("billingAccountIdList")List<String> billingAccountIdList,
                                                           @Param("paymentStatuses") List<String> paymentStatuses,
                                                           @Param("paymentDate") Date paymentDate);

我有类似上面的查询。如果为 null 或为空,是否可以在查询方法中跳过搜索参数,例如 @Param("paymentStatuses")

【问题讨论】:

Spring Data - ignore parameter if it has a null value的可能重复 【参考方案1】:

尝试改变

" and ds.statusCode in :paymentStatuses"

进入

" and (:paymentStatuses is null or ds.statusCode in :paymentStatuses)"

【讨论】:

如果参数作为成员检查应该如何?我试过这个但不起作用:Select a from MyEntity a where (:groups is null or :groups member of a.groups) 对我来说也一样.. 如果我使用参数名称两次。它不起作用 试试这个:" and (:##paymentStatuses == null or ds.statusCode in :paymentStatuses)" 如果列表包含多个项目,此解决方案将失败 您能否解释一下我们能为 mongo DB 做些什么来处理这个特定的案例?【参考方案2】:

尝试改变

" and ds.statusCode in :paymentStatuses"

进入

" and (COALESCE(:paymentStatuses, null) is null or ds.statusCode in :paymentStatuses)"

此解决方案适用于空列表、空列表和包含 1 项或更多项的列表。

【讨论】:

谢谢我解决了这个 oracle.jdbc.OracleDatabaseException: ORA-00920: invalid relationship operator error 对于列表输入这是正确的解决方案,谢谢

以上是关于如果在 Spring Data JPA 中为空或为空,如何在 @Query 中跳过 @Param的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.IllegalArgumentException:密钥字节数组不能为空或为空

如何在 iOS 中检查 NSArray 是不是为空或为空?

如何检查数据读取器是不是为空或为空

当值为空或为空时如何返回默认值

如何从 nsmutabledictionary 中删除键当该键的值在 ios 中为空或 null 时?

检查所有三列是不是不为空或为空