2014-01-27 36 views
1

我有一個過濾器,例如,假設該名John Doe是誰一個用戶搜索。過濾格姆的Grails對象

我有以下的域對象的結構:Company--->Employee--->Name。員工是公司的屬性,而名稱是員工的屬性。現在,過濾器是用於名稱屬性的,但我需要保留對公司的引用。所以例如我做了:

companyList.events.each { 
if(it.employee!=null){ 
     if(it.employee.name.toString().toLowerCase().contains(filter)){ 
     filterSet.add(it) 
     } 
} 

不幸的是,這個操作對於1500個條目是非常慢的。但是,如果我這樣做,

def searchResults = Company.findAll{ 
    employee.name == filter 
} 

這是非常快的,但我需要的過濾器,以獲得與部分名稱(即說Joh仍然匹配John Doe。我知道有匹配的是名爲like的操作,但我有。沒有成功使用它

任何幫助將非常感激

回答

3

我建議你看一下使用criteria因此,在這種情況下,你可以這樣做:

def filter = 'joh' 
def searchResults = Company.createCriteria().list() { 
    employee { 
    ilike('name', "%${filter}%") 
    } 
} 
+1

真棒完美,正是我需要的,我會盡快,我可以接受。 –

1

試試這個:

Company.findAll(「從公司c其中c.employee.name LIKE '%' | |:FILTERNAME | |「%」」,[FILTERNAME:yourFilterName])

這個查詢要快