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