JPA查询的默认返回值

Ken*_*Ken 3 jpa spring-data-jpa

我有一个JPA查询

@Query(value = "SELECT SUM(total_price) FROM ... WHERE ...", nativeQuery = true)
Run Code Online (Sandbox Code Playgroud)

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

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

bur*_*ete 5

您可以将返回类型更改为Optional

@Query(value = "SELECT SUM(total_price) FROM ... WHERE ...", nativeQuery = true)
Optional<Integer> getSum(...);
Run Code Online (Sandbox Code Playgroud)

或者您可以getSum()用一种default方法包装它;

@Query(..)
Integer getSum(...);

default Integer safeGetSum(..) {
    return Optional.ofNullable(getSum(..)).orElse(0);
}
Run Code Online (Sandbox Code Playgroud)

有关存储库中空处理的更多信息


当返回值不是列表或某些包装器(以及下面的一些其他检查器)且没有匹配的记录时,返回值将为null,因此没有巧妙的方法可以defaultValue=0通过@Query

然后,通过返回null指示查询结果不存在。保证返回集合,集合替代项,包装器和流的存储库方法永远不会返回null,而是会返回相应的空表示形式。

  • 可选和默认的用法非常优雅。 (2认同)

Ken*_*Ken 5

本机 SQL 选项是COALESCE返回 arg 列表中的第一个非空表达式

SELECT COALESCE(SUM(total_price),0) FROM ...
Run Code Online (Sandbox Code Playgroud)