2011-01-07 107 views

回答

14

想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例如:

.setProjection(Projections.sqlProjection("sum(cast(amount as signed)* direction) as amntDir", new String[] {"amntDir"} , new Type[] {Hibernate.DOUBLE})); 
+2

可以你开发你的答案? - 你最初的查询是什么:createQuery(“....”) - 结果放在哪里? (进入amntDir?) - 你如何使用结果? – 2012-07-03 07:14:17

1

预测是使用集合函数和hibnerate标准的关键词。

roseindia has a short example用于执行SELECT SUM(...)查询。看起来很接近你的问题。


Here's another forum topic,其中包括一个SUM(col1 * col2)表达和原来的海报的工作示例有例外之前similiar问题。

+0

我尝试使用“.setProjection(Projections.sum((”amount * direction“)))”但它给了我一个例外“org.hibernate.QueryException:无法解决财产:金额*方向....” – panagdu 2011-01-07 11:38:17

6

我认为你需要的是公式。类似这样的,

@Entity 
@Table('TRANSACTIONS') 
Class transactions { 

    @Column("AMOUNT") 
    private double amount; 

    @Column("DIRECTION") 
    private double direction; 

    @Formula("AMOUNT * DIRECTION") 
    private double multiplication; 

} 

并在您的投影列表中添加乘法列。