grails:使用;计数();而是在一个实例上

grails:使用;计数();而是在一个实例上,grails,groovy,Grails,Groovy,我有一个1对多的关系,其中每个小组有多个职位,即 Group -1----N- Position 类组{static hasMany=[positions:Position} 如果我有一个特定的组实例,我不能直接计算它有多少个位置吗?例如,调用一些方法group.positions 谢谢正如OverZeous所说,您可以调用group.positions.size(),但是对于大量的Position来说,这将非常昂贵,因为它将把所有的位置加载到内存中只是为了对它们进行计数,然后将它们扔掉 如果

我有一个1对多的关系,其中每个小组有多个职位,即

Group -1----N- Position
类组{static hasMany=[positions:Position}

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


谢谢

正如OverZeous所说,您可以调用
group.positions.size()
,但是对于大量的
Position
来说,这将非常昂贵,因为它将把所有的
位置加载到内存中只是为了对它们进行计数,然后将它们扔掉

如果您的
职位
类对其所属的
类有一个反向引用,例如
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]

正如OverZeous所说,您可以调用
group.positions.size()
,但是对于大量
Position
s来说,这将非常昂贵,因为它会将所有的
positions
s加载到内存中,只是为了对它们进行计数,然后将它们扔掉

如果您的
职位
类对其所属的
类有一个反向引用,例如
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]

我不想写这篇文章作为答案,因为可能有更好的解决方案,但是
group.positions.size()
应该可以,因为
group.positions
只是一个列表。但是,我认为这会将所有
Position
s加载到内存中,所以希望有一个更好的答案。我不想将此作为答案来写,因为可能有更好的解决方案,但是
group.positions.size()
应该可以,因为
group.positions
只是一个列表。但是,我认为这会将所有
Position
加载到内存中,所以希望有一个更好的答案。+1:请记住,性能差异btw countBy()和size()非常重要+1:请记住,性能差异btw countBy()和size()非常重要