如何从EntityManager.getSingleResult()返回对象中提取聚合查询值?
提取聚合查询结果的方法
当你通过EntityManager.getSingleResult()执行SUM聚合查询后,返回的returnObject对应SQL聚合函数返回的数值类型(比如BigDecimal、Long或Double,取决于数据库字段类型),可以通过以下几种方式提取值:
直接强制类型转换
如果你明确知道返回值的类型(比如pos_netto是DECIMAL类型,SUM结果通常为BigDecimal),直接强转即可:BigDecimal revenue = (BigDecimal) returnObject; // 若字段为整数类型,可转为Long或Integer // Long revenue = (Long) returnObject;通过字符串中转解析
不确定类型时,先转为字符串再解析成目标数值类型:String revenueStr = returnObject.toString(); BigDecimal revenue = new BigDecimal(revenueStr); // 转整数示例 // Long revenue = Long.parseLong(revenueStr);使用TypedQuery指定返回类型(更推荐)
创建查询时直接指定返回类型,省去后续类型转换的麻烦:TypedQuery<BigDecimal> query = entityManager.createQuery( "SELECT sum(pos_netto) as revenue from Auftraege_Positionen_BI_Test where art_nr = :artNr", BigDecimal.class ); query.setParameter("artNr", 你的参数值); BigDecimal revenue = query.getSingleResult();
注意:如果没有匹配的记录,
getSingleResult()会抛出NoResultException,可以改用getResultList(),判断列表非空后再取第一个元素,避免异常。
内容的提问来源于stack exchange,提问作者spinnning
相关产品推荐
相关产品推荐

