基于属性圣杯过滤Gorm对象



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

i具有以下域对象结构: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的操作,但我一直在使用它。

任何帮助都将不胜感激。

我建议您使用标准。因此,在这种情况下,您可以这样做:

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

尝试以下:

company.findall("来自C. employee.Name喜欢'%'| |:filtername | |'%'",[filtername:yourfiltername])

此查询必须快。

最新更新