首页 > 解决方案 > Hibernate - 具有聚合功能的 COALESCE 不适用于空数据库

问题描述

我正在尝试在 HQL 中准备一个查询,如果数据库中没有匹配的行,它将返回 BigDecimal.ZERO,或者如果有任何行,则返回特定字段的总和。

查询工作,当数据库中有东西时,但当表为空时抛出 NoResultException。你能告诉我,下面的代码有什么问题吗?

public BigDecimal getNumberOfUnitsFor(String tfiCode) {
    String query =  "SELECT COALESCE(SUM(unit.units), 0.0) " +
                    "FROM TFIUnitPurchase unit " +
                    "INNER JOIN TFI tfi on tfi.uid = unit.tfi " +
                    "WHERE tfi.code = :code " +
                    "GROUP BY tfi.code";
    Session session = getSession();
    BigDecimal sum = session.createQuery(query, BigDecimal.class)
                    .setReadOnly(true)
                    .setParameter("code", tfiCode)
                    .getSingleResult();
    session.close();
    return sum;
}

标签: hibernate

解决方案


好的,我已经想通了。这是由于 GROUP BY 子句。删除它后,一切正常。主题可以关闭。


推荐阅读