Grails中的非平凡数据查询

时间:2011-05-23 18:21:57

标签: sql hibernate grails groovy gorm

想象一下grails中的以下问题

您有某种带有数字属性的审计跟踪域类。例如,写一个scrum项目当前燃尽值的类:

class burndown {
    Date createDate
    int  value
}

每次更新任务时,您的项目都会使用此类来存储当前的燃尽值 - 这意味着每天都会有几次。

现在,您想要绘制一张图表,其中包含每天的最后存储值

对此的SQL语句可能类似于

select 
  * 
from 
  table 
where 
  id in (
    select 
      max(id) 
    from 
      table 
    group by 
      TO_CHAR(create_date,'yyyyddmm')
  )

现在我的问题是:你如何用grails进行这样的查询?

如果我必须使用这样的SQL语句,如何避免在声明中硬编码表和列名?

PS:此代码尚未经过测试。刚从我的脑海里写下来......但我猜你觉得我想要问什么

2 个答案:

答案 0 :(得分:3)

对于初学者,您很可能希望将createDate重命名为dateCreated,因为如果您使用该名称,Grails会自动为您设置,因此您只需指定“真实”的值该类的属性。但这对这个问题并不重要。

如果你想按照创建日期获得最新的项目,可以采用几种不同的方式来做到这一点,但我认为这是最有意义的:

def mostRecent = Burndown.listOrderByDateCreated(max: 1, order: 'desc')[0]

或者如果你保留你的名字

def mostRecent = Burndown.listOrderByCreateDate(max: 1, order: 'desc')[0]

这在http://grails.org/doc/latest/描述 - 这是一本很好的手册,值得一读。

答案 1 :(得分:1)

不是Grails用户,所以下面应该由Grails'ist

进行相应的更正

如果域名相关,请尝试以下操作:

Foo.findAllInList(Bar.list([group:'create_date']))