2017-02-14 2 views
1

として、私は私のリポジトリの1つに次の関数を抱えている:春データ(REST)&@query:オプションのリストは、PARAM

@RestResource(path = "filter", rel = "filter") 
@Query("SELECT t " 
     + "FROM Trip t " 
     + "WHERE " 
     + "(:from IS NULL OR t.startTs >= :from) " 
     + "AND (:categories IS NULL OR t.category IN :categories) ") 
Page<Trip> filter(
     @Param("from") Instant from, 
     @Param("categories") List<Category> categories, 
     Pageable pageable); 

Category

@Enumerated(EnumType.STRING) 
として格納されている列挙型であります Tripsテーブルの

私が正確に1つのカテゴリで自分のhttpリクエストを行っているとき、私は正しい結果を得ています。カテゴリキーなしでリクエストを行う場合と同じ動作です。複数のカテゴリ使用している場合

htt*://localhost/filter?categories=PRIVATE ==> OK

htt*://localhost/filter ==> OK

htt*://localhost/filter?categories=PRIVATE,BUSINESS 

を私は次の例外を取得しています:

org.hibernate.hql.internal.ast.QuerySyntaxException:予期しないAST ノード:{ベクトル} [select count(t)FROM foo.bar.services.trips.model.Trip t:どこから::IS NULLまたはt.startTs> =:)AND(:categories_0_、 :categories_1_ IS NULLまたはt.category IN(:categories_0_、 :categories_1_))]

ここで間違っているのは誰ですか?

答えて

1

次のいずれかを試してみてください。

1)括弧内のリストを含む書類を同封してください:ここで、括弧内のカテゴリ

@Query("SELECT t " 
     + "FROM Trip t " 
     + "WHERE " 
     + "(:from IS NULL OR t.startTs >= :from) " 
     + "AND ((:categories IS NULL) OR (t.category IN :categories)) ") 

2)囲み

t.category IN (:categories) 
+1

両方を試しましたが、動作しませんでした。しかし、あなたは正しい方向に私を指摘しました。これは最終的に動作しています:AND((:categories)IS NULL OR(t.category IN(:categories))。Thx! – StephanM

+0

素晴らしい! –

関連する問題