Grails createCriteria группировать по (groupProperty функция) несколько атрибутов - PullRequest
4 голосов
/ 23 августа 2011

Мне интересно, поддерживает ли grails createCriteria группу по нескольким атрибутам, как это делает чистый sql. Я хотел бы перечислить записи как это:

def criteria = DomainClass.createCriteria()
def results = criteria.list {
    groupProperty('parameterA')
    groupProperty('parameterB')
}

В этом списке будут перечислены только записи с уникальной комбинацией параметра A и параметра B. Проблема в том, что это не работает, есть какое-то решение, или я должен использовать hsql или что-то похожее?

Спасибо, Mateo

Ответы [ 2 ]

7 голосов
/ 21 октября 2012

Попробуйте поставить прогнозы, например.

def criteria = DomainClass.createCriteria()
def results = criteria.list {
    projections{
        groupProperty('parameterA')
        groupProperty('parameterB')
    }
}

Я написал несколько тестов

void test2xGroupProperty(){
    def pablo = new Artist(name: 'Pablo').save()
    def salvador = new Artist(name: 'Salvador').save()
    new Portrait(artist: pablo, name: "Les Demoiselles d'Avignon 1", value: 10.00).save()
    new Portrait(artist: pablo, name: "Les Demoiselles d'Avignon 2", value: 10.00).save()
    new Portrait(artist: pablo, name: "Les Demoiselles d'Avignon 3", value: 10.00).save()
    new Portrait(artist: salvador, name: "The Persistence of Memory 1", value: 20.00).save()
    new Portrait(artist: salvador, name: "The Persistence of Memory 2", value: 20.00).save()
    new Portrait(artist: salvador, name: "The Persistence of Memory 3", value: 20.00).save()
    def artistValue = Portrait.withCriteria{
        projections{
            groupProperty('value')
            groupProperty('artist')
        }
    }
    assert [[10.00, pablo], [20.00, salvador]] ==  artistValue
}

Смотрите больше образцов здесь: https://github.com/fabiooshiro/plastic-criteria/blob/master/src/groovy/plastic/criteria/CriteriaDocTests.groovy

2 голосов
/ 23 августа 2011

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

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