2016-08-28 29 views
3

JPA@Query注釈を使用してIN操作を使用しようとしています。私は、エラーの下に取得しています: -JPA QuerySyntaxException:予期しないASTノード:{ベクトル}条件の場合

antlr.NoViableAltException: unexpected AST node: {vector} 
     at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2112) 

    org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: 
    unexpected AST node: {vector} 
[ [select o FROM Stock o where (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_ is null or o.productsid IN (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_)) 

私のJavaコードの下にされています - 私はproductlistにのみ単一の項目を持っている場合、これは正常に動作

@Query("SELECT o FROM Stock o where (:productlist is null or o.productsid IN (:productlist)) ") 
List<Stockdiary> getAllStock(Pageable pageable, @Param("productlist") List<Products> productlist) 

。しかし、私はproductlistで複数のアイテムを持っている場合、クエリで以下のように出てくると、エラー: -

select o FROM Stock o where (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_ is null or o.productsid IN (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_ 

私はこのlinkを見ているが、この問題を回避するには、私のために働いていません。 私はかっこを付けたままで:productlistを渡そうとしました。

+0

は取り扱いできない「:paramはNULL IS」パラメータがCollecときまたは多分それを「OR」と組み合わせることである。だからプロバイダのバグとしてそれを上げてください。 –

答えて

2

私はあなたのような同じ問題を抱えていました。解決策は非常に簡単です。

@Query("select c from Cruise c where" + 
     " (:categoryId is null or c.category.id = :categoryId)" + 
     " and ((:portsIds) is null or c.port.id in (:portsIds))") 
List<Cruise> findByRequestQuery(@Param("portsIds") List<Long> portsIds, 
           @Param("categoryId") Long categoryId); 

ここに述べたように:周りの仕事の後、私は次のバリアントが正常に動作していることがわかっhttps://stackoverflow.com/a/24551530/6629515各収集パラメータに括弧を追加した場合、あなたが私のためにそれが働いて、収集パラメータに括弧を追加する必要があります言及:

(:portsIds) 

など一部に見える結果のSQLクエリ:あなたのJPAプロバイダのように思える

where (? is null or cruise0_.category_id=?) and ((? , ? , ?) is null or cruise0_.port_id in (? , ? , ?)) 
+0

しかし、私がMySQLを使用する場合、私はエラーを受け取りますSQLException:オペランドは1列を含む必要があります。これを修正するには? –

+0

@CatHコードのサンプルを提供してください、私は試してみます。 PostgreSQLの例を示しましたが、ここでいくつかの違いがあります。 –

関連する問題