プラットフォーム | 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 ? ' +
'or event.address.town like ?'
def results = Event.executeQuery(query, ["%London%", "%London%"], [offset: 5, max: 5])
ただし、以下は機能しません。
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]
誰かが私が犯している間違いを教えてもらえますか? 位置パラメーターは検索だけで機能しているようですが、名前付きパラメーターのマップを渡すと、この奇妙なエラーが発生します