我有过一个多一对多的关系,项目和ProjectCategory,其中的项目可以有很多类别相关的两个域,和一类可能被分配到几个项目。所以:Grails的标准HQL多到许多与组由
class ProjectCategory {
String name
...
}
class Project {
static hasMany = [categories : ProjectCategory]
...
}
我想统计每个类别有多少个项目。该SQL来实现这一目标非常简单:
select cat.name category, count(pcat.project_categories_id) projCount
from project_project_category pcat,
project_category cat
where pcat.project_category_id = cat.id
group by project_category_id
它返回是这样的:现在
category | projCount
'cat_1' | 3
'cat_2' | 4
'cat_3' | 1
...
,问题是,如何做到这一点使用标准或HQL,东西看起来更“Grails/Groovy风格”?
在此先感谢。
编辑
我已经成功在HQL解决:
def result = ProjectCategory.executeQuery(
''' select c.name, count(p.id)
from Project p join p.categories c
group by c ''')
看在预测:http://grails.org/doc/2.0.x/ref/Domain%20Classes/createC riteria.html – 2013-03-05 16:01:30
我发现这篇关于具有投影的命名查询的文章,以供进一步参考:http://wiredforcode.com/blog/2011/03/20/named-queries-with-projections-in-grails/ – Uilian 2013-03-06 12:44:20