根据属性grails过滤GORM对象

时间:2014-01-27 19:32:42

标签: grails hql gorm

我有一个过滤器,例如,假设名称John Doe是用户正在搜索的人。

我有以下域对象结构:Company--->Employee--->Name。员工是公司的属性,名称是员工的属性。现在,过滤器用于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的操作,但我使用它没有成功。

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

我建议您使用criteria。所以在这种情况下你可以这样做:

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

答案 1 :(得分:1)

试试这个:

Company.findAll(“from Company c where c.employee.name like'%'| |:filterName | |'%'”,[filterName:yourFilterName])

此查询必须快速。