2012-01-05 28 views
0

這裏基本的hiberate問題,我想爲用戶提供的列使用sum()聚合函數,我已經嘗試了下面的查詢,但它似乎不起作用,有人能夠啓發我嗎?Hibernate:setParameter sum()

public Long clientCustomQuery(String option, Date startDate, Date endDate){ 
    StringBuilder sb = new StringBuilder("select sum(:option) from Session as s "); 
    sb.append("where s.date >= :startDate and s.date <= :endDate"); 
    Query query = this.getEntityManager().createQuery(sb.toString()); 
    query.setParameter("option", option); 
    query.setParameter("startDate", startDate); 
    query.setParameter("endDate", endDate); 
    return (Long)query.getSingleResult(); 
} 

感謝

大衛

回答

1

不能使用列名作爲像這樣的查詢參數。 Hibernate不只是做一個字符串替換。它將查詢轉換爲SQL查詢並使用預準備語句來綁定參數。列名不能被參數化。

你必須自己做字符串替換:

"select sum(" + option + ") from..." 

邊注:使用一個StringBuilder來連接靜態字符串是無用的,甚至適得其反。

+0

好的,謝謝,點字符串連接 – DaveB 2012-01-05 19:46:03