我有一个JPA查询
@Query(value = "SELECT SUM(total_price) FROM ... WHERE ...", nativeQuery = true)
,当有匹配的记录时,它将按预期工作。但是,当没有匹配的记录时,查询将返回null
。
找不到记录时,如何返回零(0
)而不是null
?
答案 0 :(得分:4)
您可以将返回类型更改为Optional
;
@Query(value = "SELECT SUM(total_price) FROM ... WHERE ...", nativeQuery = true)
Optional<Integer> getSum(...);
或者您可以使用getSum()
方法包装此default
;
@Query(..)
Integer getSum(...);
default Integer safeGetSum(..) {
return Optional.ofNullable(getSum(..)).orElse(0);
}
有关null handling in repositories的更多信息
当返回值不是列表或某些包装器(以及其他一些检查项在下面)且没有匹配记录时,返回值将为null,因此没有 slick 方法通过defaultValue=0
至@Query
然后通过返回null来指示查询结果的缺失。返回集合,集合替代项,包装器和流的存储库方法保证永远不会返回null,而是返回相应的空表示。
答案 1 :(得分:2)
原生SQL选项是COALESCE
,它返回arg列表中的第一个非空表达式
SELECT COALESCE(SUM(total_price),0) FROM ...