Hibernate Criteria API:如何获取两列中所有值的总和

时间:2015-04-27 10:38:05

标签: java hibernate criteria projection

这个问题很简单,但我无法得到一些有用的东西。 说,我有下表

| ...的 X .... | .....的 A ..... | .....的乙< / STRONG> .... |
| ........... | ..... 3 ..... | ..... 2 ..... |
| ........... | ..... 1 ..... | ..... 4 ..... |
| ........... | ..... ..... 1 | 2 ..... ..... |

我只需要获得A列和B列中的总和值,所以(3 + 1 + 1)+(2 + 4 + 2)= 13,我想将它与Criteria API一起使用。< / p>

我尝试创建一个Projection来汇总A和DetachedCriteria的值,并使用类似的投影将B中的值相加,但我无法从DetachedCriteria获得唯一的结果因为它没有暴露这种方法。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以使用sqlProjection

执行此操作
.setProjection(Projections.sqlProjection("sum(A + B) as sumAB", new String[] {"sumAB"} , new Type[] {Hibernate.DOUBLE}));

答案 1 :(得分:-5)

https://stackoverflow.com/a/21650037/351861

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Number> q = cb.createQuery(MyEntity.class);
Root<MyEntity> t = q.from(MyEntity.class);    

Path<Number> fieldB = t.get(MyEntity_.B);
Path<Number> fieldA = t.get(MyEntity_.A); 
Expression<Number> sum = cb.sum(fieldA, fieldB);
q.select(sum.alias("SUM"));

System.out.println(em.createQuery(q).getSingleResult());