2016-11-06 33 views
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的第一個查詢有什麼問題?

回答

0

看來,如果你指定是java.util.List類型不參數,而是使用其他集合類型(Set等)的Hibernate的較新版本不太寬鬆

+0

你是對的,謝謝!你知道那裏發生了什麼變化嗎? –