2015-09-18 4 views
0

У меня есть следующий класс:Grails 2.5.0 - metaParams on Set?

class User { 
... 
static hasMany = [data: MyData] 
... 
} 

Я хотел бы получить user.data на объекте пользователя, но фильтровать возвращаемый список, используя metaParams как в findAllBy (https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/findAllBy.html).

Возможно ли это?

+0

Вы хотите написать запрос критериев, чтобы сделать это или его эквивалент с помощью java.util.List? –

+0

Я надеялся, что будет что-то вроде user.data.filter ([max: 10, sort: "title", order: "desc", offset: 100]). Существует ли это, или мне нужен запрос критериев? – Anonymous1

+0

Нет, этого метода не существует. Вы можете использовать запрос критериев с проекцией или реализовать эквивалентную операцию в списке, используя различные методы коллекции Groovy. –

ответ

0

С помощью критериев запроса вы можете сделать что-то вроде этого:

def id = /* some User.id here */ 

// http://grails.github.io/grails-doc/2.1.0/ref/Domain%20Classes/createCriteria.html 
def data = User.createCriteria().list(max: 10, offset: 100) { 
    projections { 
     property 'data' 
    } 

    eq 'id', id 

    order 'something', 'desc' 
} 

Если вы в конечном итоге с повторяющимися экземплярами MyData, попробуйте использовать HQL вместо этого. Пример:

// https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/executeQuery.html 
User.executeQuery 'select distinct u.data from User as u where u.id = :id', [id: id, max: 10, offset: 5]