2016-11-06 20 views
0

私のコードベースをGrails 2.1.0から3.2.0にアップグレードしました。しかし、クエリの1つが期待どおりに機能しないという状況に遭遇しました。Grails GORM 3.2.0 query with `where values in list`

public List<Location> findAllLocationsByNames(Collection<String> placeNames) { 
     return Location.executeQuery("select l from Location l where l.placeName in (:placeNames)", [placeNames: placeNames]) 
} 

アップグレードする前に、このクエリは正常に機能していました。私はタイプLinkedKeySetHashMap.getKeySet())のコレクションを渡し、場所のリストを正しく返します。しかし、今のGrailsの新バージョンで、私はこのエラーを得た:

java.util.LinkedHashMap$LinkedKeySet cannot be cast to java.lang.String 

私は少しGrailsの内部深く、GORM掘っとQueryTranslatorImplが[NAMED_PARAM] ParameterNode: '?' {name=placeNames, [email protected]}としてSQL ASTに名前付きパラメータplaceNamesを翻訳することを見ましたが、私はなぜわかりません。最後に

は、私が whereを使用するために元のクエリを変更し、DetachedCriteriaを:

public List<Location> findAllLocationsByNames(Collection<String> placeNames) { 
     return Location.where {placeName in placeNames}.list() 
} 

この時間は、すべてが正常に動作し、返された結果は、私が期待したものでした。

executeQueryを使用した最初のクエリの問題点は何ですか?

答えて

0

おかげで、あなたは正しい

+0

あなたがタイプjava.util.Listではなく、代わりに他のコレクション型(Setなど)のパラメータを指定した場合にHibernateの新しいバージョンがあまり寛大されているようです!正確に何が変わったのか知っていますか? –