2010-08-01 43 views
1

我有兩個域類與1:n的關係:的Grails - 排序域關係屬性(使用個createCriteria())

import Action 

class Task {  
    Action actionParent 
    String taskName 
} 

class Action { 
    String actionName 
} 

我有任務,其中的列表我有「Action name」這一列,我想通過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) 
} 

有沒有什麼辦法可以通過關係屬性對域類數據進行排序?

感謝您的重播,

回答

1

您是否嘗試過使用listOrderBy *格姆命令,所以它會像

def tasksList = Task.listOrderByActionName() 
4

,如果你想堅持的標準方法,嘗試這樣的事情。創建一個別名,你行動的對象,然後訪問屬性分類整理

def criteria = Task.createCriteria() 
    def taskList = criteria.list { 
     createAlias("actionParent","_action") 
     order("_action.actionName") 
    } 
+1

替代無別名: '高清TASKLIST = {criteria.list actionParent { 順序( 「actionName」) } }' – 2012-01-08 15:37:09

2

我知道這是一個老問題,但在我的特殊情況(想排序關聯的協會的字段),它只有在工作我直接傳送排序列進名單的方法:

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

當我試圖把蓋子本身的訂購信息,休眠barfed了一個例外,與消息org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]

+0

謝謝,您的解決方案爲我工作。有同樣的問題。 – Slavak 2015-05-07 06:39:31

2

試試這個

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

,你也可以做到這一點

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

    }