Grails GORM MissingMethodException с отношением 1: N - PullRequest
1 голос
/ 22 мая 2009

У меня есть такие доменные классы:

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

ServicesGroup service

просто

Long service

работает.

Что здесь происходит?

Ответы [ 3 ]

3 голосов
/ 22 мая 2009

Попробуйте так:

Step.findByService(ServicesGroup.get(3))
1 голос
/ 22 мая 2009

Может работать что-то вроде Step.findByService ([id: 3]). В любом случае он заботится только об идентификаторе для целей генерации SQL. Во многих случаях, подобных этому, вы можете добавить туда поддельную карту, а не реальную, и сэкономить себе немного производительности.

С другой стороны, при этом абстракция немного ломается.

1 голос
/ 22 мая 2009

Попробуйте

grails clean
grails run-app

Тогда попробуйте еще раз.

...