Как я могу сослаться на объект "this" в запросе критериев Grails - PullRequest
2 голосов
/ 03 ноября 2010

У меня есть набор объектов домена, связанных следующим образом:

class Book {
    static belongsTo = [author: Author]
}

class Contract {
    static belongsTo = [author: Author]
    Book book
}

class Author {
     static hasMany = [books: Book, contracts: Contract]
}

Я бы хотел создать запрос, объединяющий все авторские контракты книги, где книга контрактов - это "эта книга". Вопрос, на который я хочу ответить, это «что все книги по контракту?» Вот что у меня есть для критериев, но я не знаю, как ссылаться на этот объект:

Book.createCriteria().list() {
    author {
        contracts {
            eqProperty('book', '??') // what here??
        }
    }
}

Могу ли я сослаться на объект "this" или как-то создать для него псевдоним?

Ответы [ 3 ]

1 голос
/ 03 ноября 2010

не написал модульный тест, но я думаю, что вы можете сделать это ..

Документация GORM Прокрутите вниз, чтобы просмотреть пример с нетерпением, чтобы увидеть пример

Book.createCriteria().list() {
    author {
        contracts {
            eqProperty('book.id', book.id) // what here??
        }
    }
}
0 голосов
/ 14 ноября 2010

Не имея версии grails, работающей на этом компьютере, я не смог проверить это на синтаксис.

Вы можете сделать что-то вроде этого: добавьте «import org.hibernate.FetchMode as FM» в свой контроллер или службу

Contract.withCriteria{
    createAlias('book','b')
    fetchMode('book',FM.EAGER)
}.book.unique()
0 голосов
/ 03 ноября 2010

Вместо использования Criteria Builder, является ли прямой HQL вариантом? Я не очень хорошо владею HQL, но, возможно, вы могли бы сделать что-то вроде:

// should return a collection of Books
Contract.executeQuery('select distinct c.book from Contract c')

Если вам это нужно для определенного автора, вы можете добавить предложение where соответственно ( docs ).

...