Grails HQL命名参数不起作用

Grails HQL命名参数不起作用,grails,hql,grails-3.0.9,Grails,Hql,Grails 3.0.9,平台 |Grails版本:3.0.7 |Groovy版本:2.4.4 |JVM版本:1.8.0_51 我似乎无法在Grails HQL查询中使用命名参数。以下工作(在Grails服务类中) 但是,以下操作不起作用: def query = 'from Event event ' + 'where event.eventName like :searchEventName ' + 'or event.address.town

平台 |Grails版本:3.0.7 |Groovy版本:2.4.4 |JVM版本:1.8.0_51

我似乎无法在Grails HQL查询中使用命名参数。以下工作(在Grails服务类中)

但是,以下操作不起作用:

    def query = 'from Event event ' +
                'where event.eventName like :searchEventName ' +
                'or event.address.town like :searchTownName'
    def results = Event.executeQuery(query, [searchEventName, "%London%", searchTownName, "%London%"], [offset: 5, max: 5])
显示的错误是:

Class
groovy.lang.MissingPropertyException
Message
null
Caused by
No such property: searchEventName for class: com.mchq.event.SearchService
与我认为正确的相反,我随后声明属性

    def searchEventName, searchTownName
    def query = 'from Event event ' +
                'where event.eventName like :searchEventName ' +
                'or event.address.town like :searchTownName'
    def results = Event.executeQuery(query, [searchEventName, "%London%", searchTownName, "%London%"], [offset: 5, max: 5])
报告的错误是:

Class
java.lang.IllegalArgumentException
Message
null
Caused by
No positional parameters in query: from Event event where event.eventName like :searchEventName or event.address.town like :searchTownName
作为最后一个测试,在删除变量声明和命名参数列表后,我尝试以下操作

    def query = 'from Event event ' +
                'where event.eventName like :searchEventName ' +
                'or event.address.town like :searchTownName'
    def results = Event.executeQuery(query, [offset: 5, max: 5])
正确地说,这一信息是:

Class
org.hibernate.QueryException
Message
null
Caused by
Not all named parameters have been set: [searchEventName, searchTownName] [from Event event where event.eventName like :searchEventName or event.address.town like :searchTownName]

有人能告诉我我犯了什么错误吗?位置参数似乎正在工作,只是查找,但传递了一个命名参数的映射,从而导致了这个奇怪的错误

您正在进行大的输入错误,因为在命名查询的情况下,我们传递的是map not list。见下面的代码:

def query = 'from Event event ' +
                'where event.eventName like :searchEventName ' +
                'or event.address.town like :searchTownName'
    def results = Event.executeQuery(query, [searchEventName: "%London%", searchTownName: "%London%"], [offset: 5, max: 5])

希望有帮助

您输入的错误太大了,因为我们传递的是命名查询map not list。见下面的代码:

def query = 'from Event event ' +
                'where event.eventName like :searchEventName ' +
                'or event.address.town like :searchTownName'
    def results = Event.executeQuery(query, [searchEventName: "%London%", searchTownName: "%London%"], [offset: 5, max: 5])

希望有帮助

传递参数的方式是错误的<代码>[searchEventName,“%London%”,searchTownName,“%London%”]是groovy中的一个列表

您需要将它们指定为映射。映射定义为
[key1:value1,key2:value2]。


因此,传递参数的正确方法是
[searchEventName:“%London%”,searchTownName:“%London%”]

传递参数的方法是错误的<代码>[searchEventName,“%London%”,searchTownName,“%London%”]是groovy中的一个列表

您需要将它们指定为映射。映射定义为
[key1:value1,key2:value2]。


因此,传递参数的正确方法是
[searchEventName:“%London%”,searchTownName:“%London%”]

谢谢。我不知道我是如何反复查看代码的,看不出a和a之间有什么区别:啊,啊!非常感谢。我不知道我是如何反复查看代码的,看不出a和a之间有什么区别:啊,啊!