grails:在实例上使用“count()”代替

时间:2011-08-14 02:15:18

标签: grails groovy

我有一对多关系,每组有多个职位,即

Group -1----N- Position

class Group {static hasMany = [postions:Position}

如果我有一个特定的组实例,我不能直接计算它有多少个位置?即调用一些方法group.positions。??

由于

1 个答案:

答案 0 :(得分:8)

正如OverZealous所说,你可以调用group.positions.size(),但对于大量的Position来说它会非常昂贵,因为它会将所有这些加载到内存中以便对它们进行计数,然后将它们丢弃

如果您的Position课程对其拥有的Group课程有反向引用,例如static belongsTo = [group: Group],然后您可以使用此轻量级查询:

def group = ...
int positionCount = Position.countByGroup(group)

如果您没有双向关系,可以通过HQL获取计数:

def group = ...
int positionCount = Group.executeQuery(
    'select count(pos) from Group g ' +
    'inner join g.positions pos where g=:g', [g: group])[0]