JPA检查是否为空查询

时间:2019-02-26 16:18:20

标签: 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:无法实例化类   [来自元组的[com.statistic.server.entity.Report]]具有根本原因

     

java.lang.IllegalArgumentException:空           在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处   〜[na:1.8.0_201]           在sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源)   〜[na:1.8.0_201]           在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知   来源)〜

1 个答案:

答案 0 :(得分:2)

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

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