1

たとえば、次の 2 つのドメイン クラスがあるとします。

class Foo {
   Bar bar

   Long baz
}

class Bar {
   String name
}

createCriteriaそして、ケースを無視して、Bar の名前 (またはクライアントが並べ替えたいその他の有効なプロパティ) で並べ替えたい呼び出しがあります。私はそれを次のように減らすことができました:

Foo.createCriteria().list() {
    //...
    bar {
        order((params.sortOrder == 'asc' ? 
            Order.asc('name') : // 'name' is a variable in the real code 
            Order.desc('name')
        ).ignoreCase())
    }
}

ただし、並べ替えプロパティがネストされている場合 (つまり、のプロパティbar)、例外が発生します。

org.hibernate.QueryException: could not resolve property: name of: Foo

これらの関連する Grails バグGRAILS-8182GRAILS-9171GRAILS-3911を見つけたので、やりたいことを不可能にするバグの組み合わせがあるように見えます。

のネストされたプロパティで大文字と小文字を区別しない並べ替えを行う方法はありcreateCriteriaますか? クライアントまたはGroovyリストでソートできることはわかっていますが、車輪を再発明する必要はありません(特に、それは本当に醜い車輪になるため)。

Grails 2.2.4 を使用しています。

4

1 に答える 1

0

grails でのソートに関連する同様の問題を解決しようとしたときに、この質問に出くわしました。その間、解決策がすでに見つかっている可能性があります。そうでない場合は、次のことを試してみることをお勧めします。

Foo.createCriteria().list() {
    createAlias("bar","_b")
    order("_b.name", (params.sortOrder == "asc")?"asc":"desc")
}

Fooこのようにして、 byのインスタンスを注文できるはずですbar.name

于 2015-02-13T09:28:36.023 に答える