计算hasMany属性的长度

时间:2014-06-25 18:43:29

标签: hibernate grails hql gorm

我有一个域类:

class Person{
 static hasMany = [friends:Person]
 ....
}

我要做的是根据他们拥有的朋友数过滤掉人数。

这就是我想出来的,它完成了这项工作:

Person.where{
 friends.size() == 3
}

它很慢,我可以没有列表,所以理想情况下我只想运行类似的东西:

select count(*) from Person where size(friends) == 3

我像疯子一样搜索,但是我无法在countBy上找到那么多信息(我想我想做的事情就是数数)。

赞赏任何意见。

1 个答案:

答案 0 :(得分:2)

使用where查询,您应该能够使用count()而不是列出所有匹配项。 where创建了一个支持多项操作的DetachedCriteria

Person.where { friends.size() == 3 }.count()

如果这不能像我认为的那样有效,你可能需要使用带有投影的Criteria才能返回计数。

Person.withCriteria {
    sizeEq 'friends', 3
    projections {
        rowCount()
    }
}