尝试使用find all简单地运行域对象的查询,并且它没有按照我的预期行事:
searchResults = Contact.findAll("from Contact as c where c.company=${params.company.id} and c.firstName = '%${nameSearch}%' or c.lastName = '%${nameSearch}%' ")
我想找到公司中名字或姓氏与输入的搜索类似的所有人(params.search存储在nameSearch变量中)。如果我将第一个或最后一个的值更改为特定名称" Tim"或"约翰逊",它有效。
我对变量做错了什么或"喜欢"参考?我认为%符号基本上是搜索条件中的*符号?
我尝试过2.0.0搜索形式:
searchResults = Contact.findAll{
company == params.company.id
firstName == '%' + nameSearch + '%'
lastName == '%' + nameSearch + '%'
}
但那也没有用。谢谢你的帮助
答案 0 :(得分:7)
尝试一下:
def company = Company.get(params.company.id)
def searchResults = Contact.withCriteria {
eq('company', company)
or {
ilike('firstName', '%' + nameSearch + '%')
ilike('lastName', '%' + nameSearch + '%')
}
}
如果您不想检索Company
个实例,可以在company { }
块中使用idEq()
。
你的HQL尝试错误的一些事情(可能更多):
company
条件是将对象(c.company
)与ID值(params.company.id
)进行比较(company AND (first OR last))
,而不是(company AND first OR last)
like
代替=
,例如firstName like '%something%'
As a matter of security,你真的,真的不应该用内联值构建你的HQL语句。您应该使用命名参数。查看findAll
documentation中的一些中间示例。