2012-08-30 24 views
1

我從視圖向控制器傳遞了一個名爲statuses的ID列表。在控制器我只是執行:GORM createCriteria或具有別名的語句

def statusSelection = params.list('statuses') 

我使用createCriteria來取,然後域級記錄的列表:

MyDC.createCriteria().list(
    max: params.max, 
    offset: params.offset, 
    order: params.order, 
    sort: querySort) { 
     statuses { // hasMany statuses: Status 
      or { 
       statusSelection.each { // loop through params list 
        idEq(it.id) 
       } 
      } 
     } 
    } 

這一直工作正常,直到需求所要求的表在視圖中允許排序status屬性。現在,我得到一個org.hibernate.QueryException以下消息:

重複協會路徑:狀態

這是由於querySort值我敢肯定,但我不知道該怎麼別名排序並維護or聲明。

回答

1

如果當錯誤提出querySort ==「狀態」,那麼你可以創建別名來替換querySort。你應該改變你的GSP返回statusSort而不是狀態

MyDC.createCriteria().list(
max: params.max, 
offset: params.offset, 
order: params.order, 
sort: querySort) { 
    createAlias('statuses', 'statusSort') //This alias will replace the querySort 
    statuses { // hasMany statuses: Status 
     or { 
      statusSelection.each { // loop through params list 
       idEq(it.id) 
      } 
     } 
    } 
} 

可以讀取一個很有趣的討論在這裏:Sorting on database server or application server in n-tier architecture

+0

謝謝!我最終使用了''in''子句,但是這也起作用。好答案。 –