Grails表或列表中的其他列

时间:2010-12-20 11:15:56

标签: grails model dns gorm

我正在尝试几天从我的数据中收到一个列表。域看起来像这样:

class Alpha {    
    String a
    String b
    etc.
    static hasMany = [beta:Beta]

}

class Beta {
    String a
    Integer foo
    String status
    static belongsTo = [alpha:Alpha]
    static constraints = {
        status(nullable:false, inList:["val1","val2","val3", "val4"])
    }
}

我想在Alpha中获得所有Beta.foo和所有Beta.foo在某种状态下的总和。最好的是一个额外的行(Integer sumVal1 ...)。

我尝试过命名查询:

static namedQueries = {
        erledigterProbeAufwend {
            createAlias ('Beta', 'b')
            eq ('b.status', 'val1')
            projections {
                groupProperty('b.alpha')
                sum('b.foo', 'sumFooVal1')
            }
        }
}

但这只是一次给我一笔钱。

我期待得到一些帮助。

问候 BAS

2 个答案:

答案 0 :(得分:3)

可以formula field计算,但subquery trick

static mapping = {
    betaCount formula: "(SELECT count(*) FROM Beta b WHERE b.alpha_id = id and b.status in('a', 'b'))"
}

答案 1 :(得分:0)

在Alpha类中创建瞬态变量,并在onLoad事件中填充它们。

class Alpha {    
    String a
    String b
    etc.
    static transients = ["sumVal1",...]
    static hasMany = [beta:Beta]

    def onLoad = {
       sumVal1 = ....
    }    

}