0
我將我的代碼庫從Grails 2.1.0升級到3.2.0。但是,我遇到了一種情況,即我的某個查詢未按預期工作。Grails GORM 3.2.0查詢,其中列出的值在哪裏
public List<Location> findAllLocationsByNames(Collection<String> placeNames) {
return Location.executeQuery("select l from Location l where l.placeName in (:placeNames)", [placeNames: placeNames])
}
升級之前,此查詢運行良好。我通過了一個類型爲LinkedKeySet
(來自HashMap.getKeySet()
)的集合,它正確返回位置列表。但現在使用Grails的新版本,我得到這個錯誤:
java.util.LinkedHashMap$LinkedKeySet cannot be cast to java.lang.String
我挖一個深一點內部Grails和格姆,看到QueryTranslatorImpl翻譯命名參數placeNames
到SQL AST作爲[NAMED_PARAM] ParameterNode: '?' {name=placeNames, [email protected]}
,但我不知道爲什麼。
最後,我改變了原來的查詢中使用where
和的DetachedCriteria:
public List<Location> findAllLocationsByNames(Collection<String> placeNames) {
return Location.where {placeName in placeNames}.list()
}
這一次,一切工作正常,返回的結果是我所期待的。
使用executeQuery
的第一個查詢有什麼問題?
你是對的,謝謝!你知道那裏發生了什麼變化嗎? –