Grails GORM MissingMethodException与1:N的关系

时间:2009-05-22 07:09:46

标签: grails groovy gorm

我有这样的域类:

class ServicesGroup {
    Long id
    String name
    String description

    String toString(){
        return name
    }

    static mapping = {
        version false
        table 'root.services_groups'

        id column:'group_id' 
        name column:'group_name'
        description column:'group_desc'
    }
}

class Step {
    Long id
    ServicesGroup service
    String stepType
    Integer stepFrom
    Integer stepTo

    static constraints = {
        stepType(inList:['operator', 'client'])
    }

    static mapping = {
        version false
        table 'bill.steps'
        service column:'service_group_id'
    }
}

关系是 - 一个ServicesGroup条目可以有多个Step实例。

然而,当我在我的控制器中时,我试着

Step.findByService(3)

我明白了:

"org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: Step.findByService() is applicable for argument types: (java.lang.Integer) values: {3}"

但是,当我更改Step domain class field

ServicesGroup service

简单地

Long service

它有效。

这里发生了什么?

3 个答案:

答案 0 :(得分:3)

以这种方式尝试:

Step.findByService(ServicesGroup.get(3))

答案 1 :(得分:1)

尝试

grails clean
grails run-app

然后再试一次。

答案 2 :(得分:1)

Step.findByService([id:3])之类的东西可能有用。出于SQL生成的目的,它只关心ID。在很多像这样的情况下你可以把假地图扔到那里而不是真实的地方,并为自己节省一些性能。

另一方面,当你这样做时,抽象会有所破坏。