java - JPA 检查查询是否为空

标签 java spring spring-boot jpa jpql

我使用 JPA 进行数据库查询,如下所示:

@Query("SELECT " +
        "new Report(" +
        "sum (r.fraction1)," +
        "sum (r.fraction2)) from Report r")
Report calculateTotalReports();

当数据库已满时,它可以正常工作,但是当数据库为空时,应用程序就会崩溃。我如何检查表何时包含行然后选择总和?我尝试使用CASE WHEN ... THEN,但是JPA没有提供它。

崩溃日志:

QueryException: could not instantiate class [com.statistic.server.entity.Report] from tuple] with root cause

java.lang.IllegalArgumentException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201] at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_201] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~

最佳答案

我猜你可以在这种情况下使用COALESCE,那么如果 r.fraction1 为 null,它将返回 0。

    @Query("SELECT " +
    "new Report(" +
    "COALESCE(sum(r.fraction1),0)," +
    "COALESCE(sum(r.fraction2),0)) from Report r")

关于java - JPA 检查查询是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889859/

相关文章:

java - 多线程环境下Spring Service实例变量

java - 当我尝试在Android Studio中构建APK时出现错误

java - 如何在 Spring Boot 中定义自定义对象映射器而不影响 Spring Boot 的默认对象映射器?

java - web.xml 中的欢迎文件与 spring 不工作?

Tomcat集群中的Spring Websocket

java - Spring无法识别图像和CSS

java - Scala 中有 java.io.InputStream 的替代品吗?

spring cloud 配置服务器 - 没有这样的标签 : master

java - Spring Data JPA同时保存两个实体,列 "user_id"中为空值

java - 与 JavaMelody 集成后,每次 Rest 调用都会出现 404