JPA查询的默认返回值

时间:2019-07-12 07:29:09

标签: jpa spring-data-jpa

我有一个JPA查询

@Query(value = "SELECT SUM(total_price) FROM ... WHERE ...", nativeQuery = true)

,当有匹配的记录时,它将按预期工作。但是,当没有匹配的记录时,查询将返回null

找不到记录时,如何返回零(0)而不是null

2 个答案:

答案 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 ...