2012-06-19 86 views
0

所以我有域類Grails的搜索列表與「喜歡」

class SalesRep { 
    SalesTerritory territory 
} 
class SalesTerritory { 
    hasMany=[accounts: AccountCustomer] 
    String territoryCode 
} 

class AccountCustomer { 
    String accountName 
    String accountCode 
    belongsTo = SalesTerritory 
    hasMany=[salesTerritories: SalesTerritory] 
} 

在控制器中,我可以得到應收賬款按:我願做兩件事情

def salesRep = SalesRep.findBy... // 
def accounts = salesRep.territory.accounts 

1)搜索與某些字符串賬戶(如 '%我的帳戶%'),類似如下:

def accounts = salesRep.territory.accounts.find("accountName like '%My Account%'") 

2)分類賬戶

def accounts = salesRep.territory.accounts.sort("accountName") 

我知道我可以在域類添加靜態映射= {排序帳戶名},但如果我想用一個不同的領域,如accountCode進行排序。謝謝,我嘗試使用createCriteria,但無法讓它工作。

謝謝。

+0

你是如何建立你的標準,出了什麼問題? – aiolos

回答

2

感謝您的回答。我無法得到這個工作,但我得到的一個解決方案是在下面,基本上使用正則表達式。

def myAccount = "My Account" 
accounts = salesRep.territory.accounts.findAll { 
    it.accountName ==~ /(?i).*${myAccount}.*/ 
} 

(?i)使匹配忽略的情況。

1

嘗試

def accounts = salesRep.territory.accounts.findAllByAccountNameLike("%${MyAccount}%") 

就像是區分大小寫的,但如果你想忽略的情況下,然後使用iLike的。

對於排序,你可以使用

def accounts = salesRep.territory.accounts.list(sort:'accountName', order:'asc') 

您也可以定義你的域類通過靜態映射

static mapping = { 
    sort accountName:"asc" 
} 

排序,但我認爲,如果你想要的方式排序,你擁有了它,你需要添加一個比較器並確保你的類實現了Comparable。

class YourClassName implements Comparable{ 

String accountName 
... 


@Override 
public int compareTo(Object o) { 
    if (o == null || this == null) { 
     return 0; 
    } else { 
     return value.compareTo(o.value) 
    } 
} 
} 

然後,當您調用.sort時,它將使用您的域中的compareTo方法。

+0

當我使用findAllByAccountNameLike Stacktrace時出現以下錯誤: groovy.lang.MissingMethodException:沒有方法的簽名:org.hibernate.collection.PersistentSet.findAllByAccountNameLike()適用於參數類型:(org.codehaus.groovy .runtime.GStringImpl)values:[%Alleg%] at com.eveo.nplate.service.AccountService.getAccountsForUser(AccountService.groovy:25) – ibaralf

+0

是在您的域中定義的accountName?如果您鍵入.findAllBy並等待一秒,它將顯示一個上下文菜單,您應該看到以綠色列出的變量。 – Universitas

+0

是的,它是在Domain Class AccountCustomer中定義的。也許這只是作爲AccountCustomer.findAllByAccountNameLike ???使用,但不是當它是一個帳戶列表? – ibaralf