Grails 如何做';其中';对具有匹配局部变量名称的GORM对象的查询

Grails 如何做';其中';对具有匹配局部变量名称的GORM对象的查询,grails,gorm,Grails,Gorm,假设我希望搜索grails域对象,并且参数值位于名称与对象属性名称匹配的局部变量中: def getPerson(String firstName, String lastName) { Person person = Person.where { firstName == firstName lastName == lastName } } 如何编写查询,以便找到属性与局部变量值匹配的人员?我相信您可以使用隐式委托变量,如下所示: def ge

假设我希望搜索grails域对象,并且参数值位于名称与对象属性名称匹配的局部变量中:

def getPerson(String firstName, String lastName) {
    Person person = Person.where {
        firstName == firstName
        lastName == lastName
    }
}

如何编写查询,以便找到属性与局部变量值匹配的人员?

我相信您可以使用隐式
委托
变量,如下所示:

def getPerson(String firstName, String lastName) {
    Person person = Person.where {
        delegate.firstName == firstName
        delegate.lastName == lastName
    }
}

编辑:根据,这不是必需的,但我发现明确使用
委托
更容易阅读/理解。

如果我是你,我会避免命名方法参数,例如我的类属性。 然后,您的GORM查询可能如下所示:

def getPerson(String firstName, String lastName) {
    def query = Person.where {
        (firstName == p_firstName) && (lastName == p_lastName)
    }
    def results = query.list();
} 

您可以在此处查看:

是否有错误?我用Grails 2.2.2进行了测试,效果很好。不能使用delegate.firstName=xx——这将失败,错误为multipleComplationErrorSexception无法查询属性“delegate”