0

多対多の関係で関連付けられた2つのドメイン、ProjectProjectCategoryがあります。ここで、プロジェクトは多くのカテゴリを持つことができ、1つのカテゴリが複数のプロジェクトに割り当てられる場合があります。それで:

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 に答える