2011-01-07 112 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; 

} 

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