Hibernate:sum()中的setParameter

时间:2012-01-05 19:06:53

标签: hibernate hql

基本的hiberate问题在这里,我想使用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 个答案:

答案 0 :(得分:1)

您不能将列名用作查询参数。 Hibernate不只是进行字符串替换。它将查询转换为SQL查询,并使用预准备语句绑定参数。并且无法对列名称进行参数化。

你必须自己进行字符串替换:

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

附注:使用StringBuilder连接静态字符串是没用的,甚至会适得其反。