2011-12-29 8 views
1

私のクエリにHibernateのsqlprojectionを実装するにはどうしたらいいですか?ここでHibernateでのフィールドクエリの合計を実装する方法は?

は私のクエリ

SELECT sum(total_amount) as total,created_at from order where created_at < DATE_SUB(curdate(), INTERVAL 7 DAY) and doctor_id = 193 GROUP BY created_at 

である私は、このようなsqlRestrictionを使用してDATE_SUB機能を実装している:

String sqlWhere = "created_at > DATE_SUB(curdate(), INTERVAL "+activityGraph+" DAY) AND doctor_id = "+id +" GROUP BY created_at"; 
Criteria criteria = Hibernatesession.createCriteria(Order.class); 
criteria.add(Restrictions.sqlRestriction(sqlWhere)); 

をしかし、私はHibernateのクエリを使用して、フィールドの合計を取得する方法がわかりません。

HibernateのsetProjectionが私たちが望むように合計を得るために使用されていることがわかりましたが、私はそれをどのように使用するのか分かりません。ここでもdate_sub関数のWHERE条件を書くのにsqlRestrictionを使いたいです。
setProjectionsqlRestrictionを1つのクエリで使用します。

答えて

3

あなたはあなたの人生を困難にしています。クエリを実行する前にJavaで日付の制限を計算するだけではどうですか?

Date today = DateUtils.truncate(new Date(), Calendar.DATE); 
Date limit = DateUtils.addDays(today, -7); 

クエリは完全に静的なので、なぜCriteria APIを使用するのですか? HQLははるかに簡単です:

String hql = "SELECT sum(o.totalAmount) as total, o.createdAt from Order o" 
      + " where o.createdAt < :limit" 
      + " and o.doctor.id = 193" 
      + " group by o.createdAt"; 
2
criteria.setProjection((Projections.sum("/* name of the mapping variable for total_amount*/"))); 
関連する問題