首页 > 解决方案 > JPA检查是否为空查询

问题描述

我使用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(Native Method) ~[na:1.8.0_201] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_201] 在 sun. reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~

标签: javaspringspring-bootjpajpql

解决方案


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

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

推荐阅读