我有两个通过多对多关系相关的域名,项目和 ProjectCategory ,其中项目可以有多个类别,一个类别可能会分配给多个项目。所以:
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
...
现在,问题是,如何使用Criteria或HQL执行此操作,这看起来更像“Grails / Groovy风格”?
提前致谢。
修改
我已成功解决 HQL :
def result = ProjectCategory.executeQuery(
''' select c.name, count(p.id)
from Project p join p.categories c
group by c ''' )
答案 0 :(得分:2)
使用标准API和投影可以获得如下内容:
def results = Project.createCriteria().list() {
createAlias('categories', 'catalias')
projections {
groupProperty('catalias.name')
count('id')
}
}