SQL的Gorm等价物

时间:2012-11-19 23:51:01

标签: grails gorm

简单一点 - Grails / Gorm中获得与此SQL查询相同效果的最佳方法是什么:

SELECT YEAR(date)as SalesYear,          MONTH(日期)为SalesMonth,          SUM(价格)AS TotalSales     来自销售 GROUP BY年(日期),月(日期) 按年份排序(日期),月份(日期)

1 个答案:

答案 0 :(得分:2)

域类的executeQuery方法允许您运行HQL个查询。

如果你看一些例子,你会注意到Hibernate Query Language记得很多SQL,但是面向对象。

来自Grails文档:

  

executeQuery方法允许执行任意HQL查询。   HQL查询可以返回域类实例或指定的数组   查询选择单个字段或计算值时的数据。

因此,在您的情况下,查询将返回指定数据的数组,因为不与域类匹配,但您将能够迭代此数据。

假设您将sales表映射为Sales domain class:

class Sales {
  Date date
  BigDecimal price
  ...
  static mapping = {
    ...
  }
}


def result = Sales.executeQuery("SELECT YEAR(date) as SalesYear, MONTH(date) as SalesMonth, SUM(Price) AS TotalSales FROM Sales GROUP BY YEAR(date), MONTH(date) ORDER BY YEAR(date), MONTH(date)")

//iterate over the result
result.each { sales ->
  println sales[0] //year
  println sales[1] //month
  println sales[2] //total
}