Grails GORM MissingMethodException与1:N关系

Grails GORM MissingMethodException与1:N关系,grails,groovy,gorm,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'

我有这样的域类:

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'
    }
}

关系是-一个ServicesGroup条目可以有多个步骤实例

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

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}"
但是,当我更改步骤域类字段时

ServicesGroup service
简单地

Long service
它起作用了

这是怎么回事?

试试看

grails clean
grails run-app
然后再试一次。

再试一次

grails clean
grails run-app
然后再试一次。

这样做:

Step.findByService(ServicesGroup.get(3))
试着这样做:

Step.findByService(ServicesGroup.get(3))

类似Step.findByService([id:3])的东西可能会起作用。出于SQL生成的目的,它只关心ID。在很多这样的情况下,你可以扔一张假地图到那里,而不是真的地图,这样可以节省一些性能


另一方面,当您这样做时,抽象会出现一些问题。

类似于Step.findByService([id:3])的东西可能会起作用。出于SQL生成的目的,它只关心ID。在很多这样的情况下,你可以扔一张假地图到那里,而不是真的地图,这样可以节省一些性能


另一方面,当您这样做时,抽象会有点崩溃。

这很有效!你能告诉我为什么吗?类似于。。服务字段声明为ServicesGroup对象,因此如果我想使用服务搜索内容,我必须使用给定类型的对象?有没有更直接的方法可以在不嵌套findBy*/get的情况下获得相同的结果?谢谢请参阅下面的其他答案。第三种方法是使用Hibernate标准并执行步骤.withCriteria{service{eq(“id”,3)}}。这很有效!你能告诉我为什么吗?类似于。。服务字段声明为ServicesGroup对象,因此如果我想使用服务搜索内容,我必须使用给定类型的对象?有没有更直接的方法可以在不嵌套findBy*/get的情况下获得相同的结果?谢谢请参阅下面的其他答案。第三种方法是使用Hibernate标准并执行步骤.withCriteria{service{eq(“id”),3}}。需要在下一个版本中修复。此解决方案不仅解决了此问题,还解决了许多问题。需要在下一版本中修复。这个解决方案不仅解决了这个问题,还解决了很多问题。