4

純粋なSQLのように、grails createCriteriaが複数の属性によるグループ化をサポートしているかどうか疑問に思っています。次のようなエントリをリストしたいと思います。

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

これにより、一意の parameterA と parameterB の組み合わせを持つエントリのみが一覧表示されます。問題は、これが機能しないことです。解決策はありますか、hsql などを使用する必要がありますか?

ありがとう、マテオ

4

2 に答える 2

7

投影を入れてみてください。例えば:

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

于 2012-10-21T01:13:43.143 に答える
2

HQLを試すことができます。Criteria は実際にはビルダーであるため、常に HQL のサブセットにすぎず、group by に必要な数のプロパティを追加できることに注意してください。

于 2011-08-23T13:46:33.493 に答える