3

1:n の関係を持つ 2 つのドメイン クラスがあります。

import Action

class Task {    
    Action actionParent
    String taskName
}

class Action {
    String actionName
}

「アクション名」列があるタスクのリストがあります。この列を Action.actionName で並べ替えたいと思います。今、私は createCriteria() メソッドを使用しています [フィルタリングと並べ替えのためのより多くのロジックがあるため、使用する必要があります...] が、「Action.id」でのみ並べ替えることができます。このメソッドは次のようになります。

def criteria = Task.createCriteria();
taskList = criteria.list {
    if(parameters.max != null)
        maxResults(parameters.max)
    if(parameters.offset != null)
        firstResult(new Integer(parameters.offset))
    if(parameters.sort != null && parameters.order)
        order(parameters.sort, parameters.order)
}

関係属性によってドメイン クラス データを並べ替える方法はありますか?

リプレイありがとうございます。

マテオ

4

4 に答える 4

5

基準アプローチに固執したい場合は、次のようなことを試してください。Action オブジェクトのエイリアスを作成し、プロパティにアクセスして並べ替えます

    def criteria = Task.createCriteria()
    def taskList = criteria.list {
        createAlias("actionParent","_action")
        order( "_action.actionName")
    }
于 2010-08-01T19:50:49.080 に答える
4

これは古い質問であることは知っていますが、私の特定の状況 (関連付けの関連付けのフィールドで並べ替えたい) では、並べ替え列を list メソッドに直接渡した場合にのみ機能しました。

def criteria = Task.createCriteria();
taskList = criteria.list(max: parameters.max, offset: parameters.offset, sort: parameters.sort, order: parameters.order) {
    // Other code here...
}

注文情報をクロージャー自体に入れようとしたとき、Hibernate はメッセージで例外を発生させましたorg.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]

于 2014-05-15T16:12:09.357 に答える
2

listOrderBy* GORM コマンドを使用してみましたか?

def tasksList = Task.listOrderByActionName()
于 2010-08-01T19:45:10.190 に答える
2

これを試して

 def tasksList = Task.findAll()
 tasksListSorted = tasksList.sort { it.actionParent.actionName }

あなたもこれを行うことができます

 tasksList.sort{
        task1, task2 -> task1.actionParent.actionName.compareToIgnoreCase(task2.actionParent.actionName)

    }
于 2015-10-13T13:53:59.727 に答える