我有一个过滤器,让我们假设名称 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])
此查询必须快。