0

我有两个通过多对多关系关联的域,ProjectProjectCategory,其中项目可以有许多类别,一个类别可能分配给多个项目。所以:

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 ''' )
4

1 回答 1

2

使用标准 API 和预测可以得到这样的结果:

def results = Project.createCriteria().list() {
    createAlias('categories', 'catalias')
    projections {
        groupProperty('catalias.name')
        count('id')
    }
}
于 2013-03-05T16:05:09.130 回答