2011-12-29 25 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用於獲得我們所需的總和,但我不知道如何使用它。在這裏我也想用sqlRestriction來寫函數的WHERE條件。
因此,我將在一個查詢中使用setProjectionsqlRestriction

回答

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*/"))); 
相關問題