姓と名など、2 つのフィールドで並べ替えられたリストを取得する方法はありますか?
私は知っていて.listOrderByLastAndFirst
、.list(sort:'last, first')
うまくいきません。
姓と名など、2 つのフィールドで並べ替えられたリストを取得する方法はありますか?
私は知っていて.listOrderByLastAndFirst
、.list(sort:'last, first')
うまくいきません。
Hates_基準の回答は、私にとってはうまくいかなかったようです。順番"last,first"
に並べると、例外が発生するだけ"Property 'last,first' not found"
です。2 つのフィールドで注文するには、次の操作を実行できます。
def c = MyDomain.createCriteria()
def results = c.list {
and{
order('last','desc')
order('first','desc')
}
}
これはかなり古いですが、適切な解決策を見つけるのに役立ちました。withCriteria ショートカットを使用した「よりクリーンな」コード例:
def c = MyDomain.withCriteria {
and {
order('last', 'desc')
order('first', 'desc')
}
}
この古いソリューションは機能しなくなりました。以下のmattlaryの回答をご覧ください
HQL でカスタム ファインダーを作成するか、Criteria Builder を使用する必要がある場合があります。
MyDomain.find("from Domain as d order by last,first desc")
または
def c = MyDomain.createCriteria()
def results = c.list {
order("last,first", "desc")
}
より複雑な順序付け基準 (Grails 2.1.0 でテスト済み)
def c = MyDomain.withCriteria {
property {
order('last', 'desc')
}
order('first', 'desc')
}
最初に MyDomain.property.last で並べ替え、次に MyDomain.first で並べ替えます
基準が最善の策だと思いますが、最初にファインダーを試すことで正しいことをしました。GORMからドメインオブジェクトを取得する場合、試行する正しい順序は、動的ファインダー、基準、HQLです。
このクエリは、最初のフィールドに基づいて機能しています。最初のフィールドが空白の場合、2 番目のフィールドによってショートされます。
order('last','desc')
order('first','desc')
アイテムの内容に基づいてリストを並べ替える場合は、複数のプロパティに基づいて並べ替え順序を決定できるスマートなコンパレータを実装する必要があります。
Groovy スタイルのコンパレーターの例をいくつかここに示します
ただし、並べ替えているリストがデータベース クエリから返されている場合は、CrteriaQuery を使用して並べ替え、その上で並べ替える方がよいでしょう。