如果在 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:密钥字节数组不能为空或为空