JPA检查是不是为空查询

Posted

技术标签:

【中文标题】JPA检查是不是为空查询【英文标题】:JPA check if null queryJPA检查是否为空查询 【发布时间】:2019-07-20 06:04:49 【问题描述】:

我像这样使用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] from tuple] 有根本原因

java.lang.IllegalArgumentException: null 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) ~[na:1.8.0_201] 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)~

【问题讨论】:

尝试使用IFNULLCOALESCE JPQL 显然确实允许 CASE 语句 datanucleus.org:15080/products/accessplatform_5_2/jpa/… 并说应用程序崩溃很可能取决于应用程序。发布实际异常会告诉您它在哪里崩溃,因为当没有数据时,JPA 提供程序不应该“崩溃”。 如果您的构造函数显示Report(double, double),请尝试将其更改为Report(Double, Double),也许您会没事的。 【参考方案1】:

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

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

【讨论】:

以上是关于JPA检查是不是为空查询的主要内容,如果未能解决你的问题,请参考以下文章

如何检查参数是不是为空并在查询中检查它

如何检查查询响应是不是为空 Parse Sever?

在 linq 查询后检查实体是不是为空

检查选择计数值是不是为空/空查询构建器 symfony

HQL 查询以检查集合的大小是不是为 0 或为空

如何在jooq查询的左连接中检查记录是不是完​​全为空