我有一个过滤器,例如,假设名称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
的操作,但我使用它没有成功。
任何帮助都会非常感激。
答案 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])
此查询必须快速。