Grails createCriteria группирует (функция groupProperty) по нескольким атрибутам

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

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

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

Спасибо, Матео


person kuceram    schedule 23.08.2011    source источник


Ответы (2)


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

person Kico Lobo    schedule 23.08.2011

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

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

person Sr. Oshiro    schedule 21.10.2012