我有過一個多一對多的關係,項目和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