基本的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();
}
由于
大卫
答案 0 :(得分:1)
您不能将列名用作查询参数。 Hibernate不只是进行字符串替换。它将查询转换为SQL查询,并使用预准备语句绑定参数。并且无法对列名称进行参数化。
你必须自己进行字符串替换:
"select sum(" + option + ") from..."
附注:使用StringBuilder连接静态字符串是没用的,甚至会适得其反。