2.0.0.RC1 Where Queries - нет исключений для такого свойства - PullRequest
3 голосов
/ 19 ноября 2011

Я получаю исключение groovy.lang.MissingPropertyException каждый раз, когда пытаюсь передать переменную в запрос where.

Это мои доменные классы:

class Book {
    String title

    static belongsTo = [author: Author]

    static constraints = {
        title(blank: false, maxSize: 100)
    }
}

class Author {
    String name

    static hasMany = [books: Book]

    static constraints = {
        name(unique: true, blank: false, maxSize: 50)
    }
}

И этот метод испытаний вызывает исключение:

@Test
    void testWhereQuery() {
        long authorId = 5
        def query = Book.where {
            author.id == authorId
        }

        def books = query.list() 
        assert books.size() == 0
    }

groovy.lang.MissingPropertyException: No such property: authorId for class: grails.gorm.DetachedCriteria
    at grails.gorm.DetachedCriteria.methodMissing(DetachedCriteria.groovy:808)
    at grails.gorm.DetachedCriteria.build(DetachedCriteria.groovy:723)
    at org.grails.datastore.gorm.GormStaticApi.where(GormStaticApi.groovy:116)
    at helloworld.BooksIntegrationTests.testWhereQuery(BooksIntegrationTests.groovy:38)

Как передать переменную в запрос?

Ответы [ 2 ]

2 голосов
/ 26 июля 2012

Я тоже боролся с этим.

Попробуйте изменить запрос where на:

def query = Book.where {
    author.id.toString() == "${authorId}"
}

Эта грязная техника работает только внутри строк и является единственным способом, которым я смог добиться подстановки переменных для работы там, где запрашиваются.

Отсутствие достойной поддержки параметризованных там, где запросы делают их практически бесполезными, IMO. Позор, потому что формат обозначений очень лаконичен.

1 голос
/ 21 ноября 2011

Я сам задал этот вопрос и обнаружил, что там, где запросы не предоставляют никакой поддержки переменных. Похоже, что только именованные запросы могут это сделать.

Параметры с новыми запросами where в Grails 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...