2012-01-05 23 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