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

Ray*_*Ray 1 grails groovy

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

Group -1----N- Position
Run Code Online (Sandbox Code Playgroud)

class Group {static hasMany = [postions:Position}

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

谢谢

Bur*_*ith 8

正如OverZealous所说你可以打电话group.positions.size()但是对于大量的Positions来说它会非常昂贵,因为它会将所有这些加载到内存中来计算它们,然后扔掉它们.

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

def group = ...
int positionCount = Position.countByGroup(group)
Run Code Online (Sandbox Code Playgroud)

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

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