2014-01-27 1 views
1

필터가 있습니다. 예를 들어, 사용자 이름이 John Doe 인 것으로 가정합니다.속성 grails에 기반한 GORM 객체 필터링

다음 도메인 개체 구조가 있습니다 : Company--->Employee--->Name. 여기서 employee는 회사의 속성이고 name은 employee의 속성입니다. 이제 filter는 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를 사용하여 볼 제안이 경우에 당신이 할 수 있도록 :.

+1

최고 완벽한, 내가 필요 단지 내가 최대한 빨리 받아 들일 겁니다... –

1

시도해보십시오.

Company.findAll ("c 회사의 c.employee.name은 '%'| | : filterName | | '%' "[FILTERNAME : yourFilterName])을

이 쿼리는 빨라야한다