2012-01-05 8 views
0

基本的な質問はここでは、ユーザー提供の列にsum()集計関数を使用したいが、私は下のクエリを試したが、うまくいかないようだ。Hibernate:setParameter in 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