如何在某些单元格上使用CriteriaQuery SUM自定义操作?

考虑你有表T,字段A和B.

使用常规SQL,我可以这样做:

SELECT SUM(A * (100.0 - B) / 100.0) AS D FROM T; 

而且我会得到我所期望的。

但是,我不确定如何使用CriteriaQuery。

我知道如何对1个字段求和,但不知道如何在一行中的多个字段上对某些数学表达式求和。

CriteriaBuilder接口提供以下算术函数:

  • 另外: sum(a, b)
  • 减法: diff(a, b)
  • 乘法: prod(a, b)
  • 分裂: quot(a, b)

其中b参数可以是表达式和​​/或文字。

至于查询,这里是一个以人类可读forms编写的例子:

 CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery q = cb.createQuery(Number.class); Root t = q.from(T.class); // build SUM(A * (100.0 - B) / 100.0) expression Expression diff = cb.diff(100.0, t.get("B")); Expression prod = cb.prod(t.get("A"), diff); Expression quot = cb.quot(prod, 100.0); Expression sum = cb.sum(quot); q.select(sum.alias("D")); System.out.println(em.createQuery(q).getSingleResult()); 

您还可以将查询构建为一行:

 q.select(cb.sum(cb.quot(cb.prod(t.get("A"), cb.diff(100.0, t.get("B"))), 100.0)).alias("D")); 

我希望它能澄清你的疑虑。