【问题标题】:grails: using "count()" on an instance insteadgrails:在实例上使用“count()”代替
【发布时间】:2011-08-14 02:15:18
【问题描述】:

我有一个一对多的关系,每个组都有多个位置,即

Group -1----N- Position

class Group { static hasMany = [postions: Position }

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

谢谢

【问题讨论】:

  • 我不想写这个作为答案,因为可能有更好的解决方案,但group.positions.size() 应该可以工作,因为group.positions 只是一个列表。但是,我认为这会将所有Positions 加载到内存中,因此希望有更好的答案。

标签: grails groovy


【解决方案1】:

正如 OverZealous 所说,您可以致电 group.positions.size(),但对于大量 Positions 而言,这将非常昂贵,因为它会将所有这些都加载到内存中只是为了计算它们,然后将它们丢弃。

如果您的 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]

【讨论】:

  • +1 :记住这一点非常重要,即性能差异 btw countBy() 和 size()
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多